forked from Wavyzz/dolibarr
merge conflict
This commit is contained in:
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -3,7 +3,7 @@
|
|||||||
*Please:*
|
*Please:*
|
||||||
- *only keep the "Fix", "Close" or "New" section*
|
- *only keep the "Fix", "Close" or "New" section*
|
||||||
- *follow the project [contributing guidelines](/.github/CONTRIBUTING.md)*
|
- *follow the project [contributing guidelines](/.github/CONTRIBUTING.md)*
|
||||||
- *replace the bracket enclosed textswith meaningful informations*
|
- *replace the bracket enclosed texts with meaningful information*
|
||||||
|
|
||||||
|
|
||||||
# Fix #[*issue_number Short description*]
|
# Fix #[*issue_number Short description*]
|
||||||
|
|||||||
10
ChangeLog
10
ChangeLog
@@ -3,6 +3,16 @@ English Dolibarr ChangeLog
|
|||||||
--------------------------------------------------------------
|
--------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
***** ChangeLog for 15.0.0 compared to 14.0.0 *****
|
||||||
|
|
||||||
|
For developers:
|
||||||
|
---------------
|
||||||
|
|
||||||
|
WARNING:
|
||||||
|
|
||||||
|
Following changes may create regressions for some external modules, but were necessary to make Dolibarr better:
|
||||||
|
* Update hook 'printOriginObjectLine', removed check on product type and special code. Need now reshook.
|
||||||
|
|
||||||
***** ChangeLog for 14.0.0 compared to 13.0.0 *****
|
***** ChangeLog for 14.0.0 compared to 13.0.0 *****
|
||||||
|
|
||||||
For users:
|
For users:
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ If you don't have time to install it yourself, you can try some commercial 'read
|
|||||||
|
|
||||||
## UPGRADING
|
## UPGRADING
|
||||||
|
|
||||||
Dolibarr supports upgrading usually wihtout the need for any (commercial) support (depending on if you use any commercial extensions) and supports upgrading all the way from any version after 2.8 without breakage. This is unique in the ERP ecosystem and a benefit our users highly appreciate!
|
Dolibarr supports upgrading, usually without the need for any (commercial) support (depending on if you use any commercial extensions). It supports upgrading all the way from any version after 2.8 without breakage. This is unique in the ERP ecosystem and a benefit our users highly appreciate!
|
||||||
|
|
||||||
- At first make a backup of your Dolibarr files & than [see](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr)
|
- At first make a backup of your Dolibarr files & than [see](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr)
|
||||||
- Check that your installed PHP version is supported by the new version [see PHP support](./doc/phpmatrix.md).
|
- Check that your installed PHP version is supported by the new version [see PHP support](./doc/phpmatrix.md).
|
||||||
|
|||||||
145
dev/tools/spider.php
Normal file
145
dev/tools/spider.php
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file dev/tools/spider.php
|
||||||
|
* \brief Script to spider Dolibarr app.
|
||||||
|
*
|
||||||
|
* To use it:
|
||||||
|
* - Disable module "bookmark"
|
||||||
|
* - Exclude param optioncss, token, sortfield, sortorder
|
||||||
|
*/
|
||||||
|
|
||||||
|
$crawledLinks=array();
|
||||||
|
const MAX_DEPTH=2;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $url URL
|
||||||
|
* @param string $depth Depth
|
||||||
|
* @return string String
|
||||||
|
*/
|
||||||
|
function followLink($url, $depth = 0)
|
||||||
|
{
|
||||||
|
global $crawledLinks;
|
||||||
|
$crawling=array();
|
||||||
|
if ($depth>MAX_DEPTH) {
|
||||||
|
echo "<div style='color:red;'>The Crawler is giving up!</div>";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$options=array(
|
||||||
|
'http'=>array(
|
||||||
|
'method'=>"GET",
|
||||||
|
'user-agent'=>"gfgBot/0.1\n"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$context=stream_context_create($options);
|
||||||
|
$doc=new DomDocument();
|
||||||
|
@$doc->loadHTML(file_get_contents($url, false, $context));
|
||||||
|
$links=$doc->getElementsByTagName('a');
|
||||||
|
$pageTitle=getDocTitle($doc, $url);
|
||||||
|
$metaData=getDocMetaData($doc);
|
||||||
|
foreach ($links as $i) {
|
||||||
|
$link=$i->getAttribute('href');
|
||||||
|
if (ignoreLink($link)) continue;
|
||||||
|
$link=convertLink($url, $link);
|
||||||
|
if (!in_array($link, $crawledLinks)) {
|
||||||
|
$crawledLinks[]=$link;
|
||||||
|
$crawling[]=$link;
|
||||||
|
insertIntoDatabase($link, $pageTitle, $metaData, $depth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($crawling as $crawlURL)
|
||||||
|
followLink($crawlURL, $depth+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $site Site
|
||||||
|
* @param string $path Path
|
||||||
|
* @return string String
|
||||||
|
*/
|
||||||
|
function convertLink($site, $path)
|
||||||
|
{
|
||||||
|
if (substr_compare($path, "//", 0, 2)==0)
|
||||||
|
return parse_url($site)['scheme'].$path;
|
||||||
|
elseif (substr_compare($path, "http://", 0, 7)==0 or
|
||||||
|
substr_compare($path, "https://", 0, 8)==0 or
|
||||||
|
substr_compare($path, "www.", 0, 4)==0)
|
||||||
|
return $path;
|
||||||
|
else return $site.'/'.$path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $url URL
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function ignoreLink($url)
|
||||||
|
{
|
||||||
|
return $url[0]=="#" or substr($url, 0, 11) == "javascript:";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $link URL
|
||||||
|
* @param string $title Title
|
||||||
|
* @param string $metaData Array
|
||||||
|
* @param int $depth Depth
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function insertIntoDatabase($link, $title, &$metaData, $depth)
|
||||||
|
{
|
||||||
|
//global $crawledLinks;
|
||||||
|
|
||||||
|
echo "Inserting new record {URL= ".$link.", Title = '$title', Description = '".$metaData['description']."', Keywords = ' ".$metaData['keywords']."'}<br/><br/><br/>";
|
||||||
|
|
||||||
|
//²$crawledLinks[]=$link;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $doc Doc
|
||||||
|
* @param string $url URL
|
||||||
|
* @return string URL/Title
|
||||||
|
*/
|
||||||
|
function getDocTitle(&$doc, $url)
|
||||||
|
{
|
||||||
|
$titleNodes=$doc->getElementsByTagName('title');
|
||||||
|
if (count($titleNodes)==0 or !isset($titleNodes[0]->nodeValue))
|
||||||
|
return $url;
|
||||||
|
$title=str_replace('', '\n', $titleNodes[0]->nodeValue);
|
||||||
|
return (strlen($title)<1)?$url:$title;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $doc Doc
|
||||||
|
* @return array Array
|
||||||
|
*/
|
||||||
|
function getDocMetaData(&$doc)
|
||||||
|
{
|
||||||
|
$metaData=array();
|
||||||
|
$metaNodes=$doc->getElementsByTagName('meta');
|
||||||
|
foreach ($metaNodes as $node)
|
||||||
|
$metaData[$node->getAttribute("name")] = $node->getAttribute("content");
|
||||||
|
if (!isset($metaData['description']))
|
||||||
|
$metaData['description']='No Description Available';
|
||||||
|
if (!isset($metaData['keywords'])) $metaData['keywords']='';
|
||||||
|
return array(
|
||||||
|
'keywords'=>str_replace('', '\n', $metaData['keywords']),
|
||||||
|
'description'=>str_replace('', '\n', $metaData['description'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
followLink("http://localhost/dolibarr_dev/htdocs");
|
||||||
@@ -49,7 +49,7 @@ if (empty($user->rights->accounting->mouvements->lire)) {
|
|||||||
if (empty($conf->comptabilite->enabled) && empty($conf->accounting->enabled) && empty($conf->asset->enabled) && empty($conf->intracommreport->enabled)) {
|
if (empty($conf->comptabilite->enabled) && empty($conf->accounting->enabled) && empty($conf->asset->enabled) && empty($conf->intracommreport->enabled)) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->compta->resultat->lire) && empty($user->rights->accounting->mouvements->lire) && empty($user->rights->asset->read) && empty($user->rights->intracommreport->read)) {
|
if (empty($user->rights->compta->resultat->lire) && empty($user->rights->accounting->comptarapport->lire) && empty($user->rights->accounting->mouvements->lire) && empty($user->rights->asset->read) && empty($user->rights->intracommreport->read)) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ if (empty($conf->cron->enabled)) {
|
|||||||
// Get the max frequency of reminder
|
// Get the max frequency of reminder
|
||||||
if ($job->id > 0) {
|
if ($job->id > 0) {
|
||||||
if ($job->status != $job::STATUS_ENABLED) {
|
if ($job->status != $job::STATUS_ENABLED) {
|
||||||
|
$langs->load("cron");
|
||||||
print '<span class="opacitymedium warning">'.$langs->trans("JobXMustBeEnabled", $langs->transnoentitiesnoconv("sendEmailsReminder")).'</span>';
|
print '<span class="opacitymedium warning">'.$langs->trans("JobXMustBeEnabled", $langs->transnoentitiesnoconv("sendEmailsReminder")).'</span>';
|
||||||
} else {
|
} else {
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_EMAIL&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_EMAIL&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
|
||||||
|
|||||||
@@ -101,8 +101,8 @@ print '<br>';
|
|||||||
print $langs->trans("ClickToDialUrlDesc").'<br>';
|
print $langs->trans("ClickToDialUrlDesc").'<br>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
print '<span class="opacitymedium">';
|
print '<span class="opacitymedium">';
|
||||||
print $langs->trans("Example").':<br>';
|
print $langs->trans("Examples").':<br>';
|
||||||
print 'http://myphoneserver/mypage?login=__LOGIN__&password=__PASS__&caller=__PHONEFROM__&called=__PHONETO__<br>';
|
print 'https://myphoneserver/mypage?login=__LOGIN__&password=__PASS__&caller=__PHONEFROM__&called=__PHONETO__<br>';
|
||||||
print 'sip:__PHONETO__@my.sip.server';
|
print 'sip:__PHONETO__@my.sip.server';
|
||||||
print '</span>';
|
print '</span>';
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,11 @@ $arrayofparameters = array(
|
|||||||
'DAV_ALLOW_ECM_DIR'=>array('css'=>'minwidth200', 'enabled'=>$conf->ecm->enabled)
|
'DAV_ALLOW_ECM_DIR'=>array('css'=>'minwidth200', 'enabled'=>$conf->ecm->enabled)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// To fix when dire does not exists
|
||||||
|
dol_mkdir($conf->dav->dir_output.'/temp');
|
||||||
|
dol_mkdir($conf->dav->dir_output.'/public');
|
||||||
|
dol_mkdir($conf->dav->dir_output.'/private');
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ $tabsql[3] = "SELECT r.rowid as rowid, r.code_region as state_code, r.nom as lib
|
|||||||
$tabsql[4] = "SELECT c.rowid as rowid, c.code, c.label, c.active, c.favorite FROM ".MAIN_DB_PREFIX."c_country AS c";
|
$tabsql[4] = "SELECT c.rowid as rowid, c.code, c.label, c.active, c.favorite FROM ".MAIN_DB_PREFIX."c_country AS c";
|
||||||
$tabsql[5] = "SELECT c.rowid as rowid, c.code as code, c.label, c.active FROM ".MAIN_DB_PREFIX."c_civility AS c";
|
$tabsql[5] = "SELECT c.rowid as rowid, c.code as code, c.label, c.active FROM ".MAIN_DB_PREFIX."c_civility AS c";
|
||||||
$tabsql[6] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.type, a.active, a.module, a.color, a.position FROM ".MAIN_DB_PREFIX."c_actioncomm AS a";
|
$tabsql[6] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.type, a.active, a.module, a.color, a.position FROM ".MAIN_DB_PREFIX."c_actioncomm AS a";
|
||||||
$tabsql[7] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.accountancy_code as accountancy_code, a.deductible, c.code as country_code, c.label as country, a.fk_pays as country_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_pays=c.rowid and c.active=1";
|
$tabsql[7] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.accountancy_code as accountancy_code, c.code as country_code, c.label as country, a.fk_pays as country_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_pays=c.rowid and c.active=1";
|
||||||
$tabsql[8] = "SELECT t.id as rowid, t.code as code, t.libelle, t.fk_country as country_id, c.code as country_code, c.label as country, t.position, t.active FROM ".MAIN_DB_PREFIX."c_typent as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_country=c.rowid";
|
$tabsql[8] = "SELECT t.id as rowid, t.code as code, t.libelle, t.fk_country as country_id, c.code as country_code, c.label as country, t.position, t.active FROM ".MAIN_DB_PREFIX."c_typent as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_country=c.rowid";
|
||||||
$tabsql[9] = "SELECT c.code_iso as code, c.label, c.unicode, c.active FROM ".MAIN_DB_PREFIX."c_currencies AS c";
|
$tabsql[9] = "SELECT c.code_iso as code, c.label, c.unicode, c.active FROM ".MAIN_DB_PREFIX."c_currencies AS c";
|
||||||
$tabsql[10] = "SELECT t.rowid, t.code, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, c.label as country, c.code as country_code, t.fk_pays as country_id, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_pays=c.rowid";
|
$tabsql[10] = "SELECT t.rowid, t.code, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, c.label as country, c.code as country_code, t.fk_pays as country_id, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_pays=c.rowid";
|
||||||
@@ -294,7 +294,7 @@ $tabfield[3] = "code,libelle,country_id,country";
|
|||||||
$tabfield[4] = "code,label";
|
$tabfield[4] = "code,label";
|
||||||
$tabfield[5] = "code,label";
|
$tabfield[5] = "code,label";
|
||||||
$tabfield[6] = "code,libelle,type,color,position";
|
$tabfield[6] = "code,libelle,type,color,position";
|
||||||
$tabfield[7] = "code,libelle,country,accountancy_code,deductible";
|
$tabfield[7] = "code,libelle,country,accountancy_code";
|
||||||
$tabfield[8] = "code,libelle,country_id,country".(!empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ? ',position' : '');
|
$tabfield[8] = "code,libelle,country_id,country".(!empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ? ',position' : '');
|
||||||
$tabfield[9] = "code,label,unicode";
|
$tabfield[9] = "code,label,unicode";
|
||||||
$tabfield[10] = "country_id,country,code,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note";
|
$tabfield[10] = "country_id,country,code,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note";
|
||||||
@@ -340,7 +340,7 @@ $tabfieldvalue[3] = "code,libelle,country";
|
|||||||
$tabfieldvalue[4] = "code,label";
|
$tabfieldvalue[4] = "code,label";
|
||||||
$tabfieldvalue[5] = "code,label";
|
$tabfieldvalue[5] = "code,label";
|
||||||
$tabfieldvalue[6] = "code,libelle,type,color,position";
|
$tabfieldvalue[6] = "code,libelle,type,color,position";
|
||||||
$tabfieldvalue[7] = "code,libelle,country,accountancy_code,deductible";
|
$tabfieldvalue[7] = "code,libelle,country,accountancy_code";
|
||||||
$tabfieldvalue[8] = "code,libelle,country".(!empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ? ',position' : '');
|
$tabfieldvalue[8] = "code,libelle,country".(!empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ? ',position' : '');
|
||||||
$tabfieldvalue[9] = "code,label,unicode";
|
$tabfieldvalue[9] = "code,label,unicode";
|
||||||
$tabfieldvalue[10] = "country,code,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note";
|
$tabfieldvalue[10] = "country,code,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note";
|
||||||
@@ -386,7 +386,7 @@ $tabfieldinsert[3] = "code_region,nom,fk_pays";
|
|||||||
$tabfieldinsert[4] = "code,label";
|
$tabfieldinsert[4] = "code,label";
|
||||||
$tabfieldinsert[5] = "code,label";
|
$tabfieldinsert[5] = "code,label";
|
||||||
$tabfieldinsert[6] = "code,libelle,type,color,position";
|
$tabfieldinsert[6] = "code,libelle,type,color,position";
|
||||||
$tabfieldinsert[7] = "code,libelle,fk_pays,accountancy_code,deductible";
|
$tabfieldinsert[7] = "code,libelle,fk_pays,accountancy_code";
|
||||||
$tabfieldinsert[8] = "code,libelle,fk_country".(!empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ? ',position' : '');
|
$tabfieldinsert[8] = "code,libelle,fk_country".(!empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ? ',position' : '');
|
||||||
$tabfieldinsert[9] = "code_iso,label,unicode";
|
$tabfieldinsert[9] = "code_iso,label,unicode";
|
||||||
$tabfieldinsert[10] = "fk_pays,code,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note";
|
$tabfieldinsert[10] = "fk_pays,code,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note";
|
||||||
|
|||||||
@@ -34,13 +34,9 @@ require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
|
|||||||
// Translations
|
// Translations
|
||||||
$langs->loadLangs(array("admin", "eventorganization"));
|
$langs->loadLangs(array("admin", "eventorganization"));
|
||||||
|
|
||||||
// Access control
|
|
||||||
if (!$user->admin) {
|
|
||||||
accessforbidden();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
|
$cancel = GETPOST('cancel', 'aZ09');
|
||||||
$backtopage = GETPOST('backtopage', 'alpha');
|
$backtopage = GETPOST('backtopage', 'alpha');
|
||||||
|
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
@@ -70,11 +66,21 @@ $setupnotempty = 0;
|
|||||||
|
|
||||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||||
|
|
||||||
|
// Access control
|
||||||
|
if (empty($user->admin)) {
|
||||||
|
accessforbidden();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if ($cancel) {
|
||||||
|
$action ='';
|
||||||
|
}
|
||||||
|
|
||||||
if ((float) DOL_VERSION >= 6) {
|
if ((float) DOL_VERSION >= 6) {
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
|
include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
|
||||||
}
|
}
|
||||||
@@ -207,7 +213,7 @@ if ($action == 'edit') {
|
|||||||
print '<input type="hidden" name="action" value="update">';
|
print '<input type="hidden" name="action" value="update">';
|
||||||
|
|
||||||
print '<table class="noborder centpercent">';
|
print '<table class="noborder centpercent">';
|
||||||
print '<tr class="liste_titre"><td class="titlefieldcreate">'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
|
print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
|
||||||
|
|
||||||
foreach ($arrayofparameters as $constname => $val) {
|
foreach ($arrayofparameters as $constname => $val) {
|
||||||
if ($val['enabled']==1) {
|
if ($val['enabled']==1) {
|
||||||
@@ -293,7 +299,9 @@ if ($action == 'edit') {
|
|||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
print '<br><div class="center">';
|
print '<br><div class="center">';
|
||||||
print '<input class="button button-save" type="submit" value="'.$langs->trans("Save").'">';
|
print '<input class="button button-save" type="submit" name="save" value="'.$langs->trans("Save").'">';
|
||||||
|
print ' ';
|
||||||
|
print '<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
@@ -301,7 +309,7 @@ if ($action == 'edit') {
|
|||||||
} else {
|
} else {
|
||||||
if (!empty($arrayofparameters)) {
|
if (!empty($arrayofparameters)) {
|
||||||
print '<table class="noborder centpercent">';
|
print '<table class="noborder centpercent">';
|
||||||
print '<tr class="liste_titre"><td class="titlefieldcreate">'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
|
print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
|
||||||
|
|
||||||
foreach ($arrayofparameters as $constname => $val) {
|
foreach ($arrayofparameters as $constname => $val) {
|
||||||
if ($val['enabled']==1) {
|
if ($val['enabled']==1) {
|
||||||
|
|||||||
@@ -274,147 +274,141 @@ print '</div>';
|
|||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
|
|
||||||
if ($conf->global->MAIN_FEATURES_LEVEL < 2) {
|
|
||||||
print dol_get_fiche_end();
|
|
||||||
// End of page
|
|
||||||
llxFooter();
|
|
||||||
$db->close();
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Documents models for Holidays
|
* Documents models for Holidays
|
||||||
*/
|
*/
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("TemplatePDFHolidays"), '', '');
|
if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
|
||||||
|
print load_fiche_titre($langs->trans("TemplatePDFHolidays"), '', '');
|
||||||
|
|
||||||
// Defined model definition table
|
// Defined model definition table
|
||||||
$def = array();
|
$def = array();
|
||||||
$sql = "SELECT nom";
|
$sql = "SELECT nom";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."document_model";
|
$sql .= " FROM ".MAIN_DB_PREFIX."document_model";
|
||||||
$sql .= " WHERE type = '".$db->escape($type)."'";
|
$sql .= " WHERE type = '".$db->escape($type)."'";
|
||||||
$sql .= " AND entity = ".$conf->entity;
|
$sql .= " AND entity = ".$conf->entity;
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
if ($resql) {
|
if ($resql) {
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$num_rows = $db->num_rows($resql);
|
$num_rows = $db->num_rows($resql);
|
||||||
while ($i < $num_rows) {
|
while ($i < $num_rows) {
|
||||||
$array = $db->fetch_array($resql);
|
$array = $db->fetch_array($resql);
|
||||||
array_push($def, $array[0]);
|
array_push($def, $array[0]);
|
||||||
$i++;
|
$i++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
dol_print_error($db);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
print '<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="noborder centpercent">';
|
print '<table class="noborder centpercent">';
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print '<td>'.$langs->trans("Name").'</td>';
|
print '<td>'.$langs->trans("Name").'</td>';
|
||||||
print '<td>'.$langs->trans("Description").'</td>';
|
print '<td>'.$langs->trans("Description").'</td>';
|
||||||
print '<td align="center" width="60">'.$langs->trans("Status")."</td>\n";
|
print '<td align="center" width="60">'.$langs->trans("Status")."</td>\n";
|
||||||
print '<td align="center" width="60">'.$langs->trans("Default")."</td>\n";
|
print '<td align="center" width="60">'.$langs->trans("Default")."</td>\n";
|
||||||
print '<td align="center" width="80">'.$langs->trans("ShortInfo").'</td>';
|
print '<td align="center" width="80">'.$langs->trans("ShortInfo").'</td>';
|
||||||
print '<td align="center" width="80">'.$langs->trans("Preview").'</td>';
|
print '<td align="center" width="80">'.$langs->trans("Preview").'</td>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
clearstatcache();
|
clearstatcache();
|
||||||
|
|
||||||
foreach ($dirmodels as $reldir) {
|
foreach ($dirmodels as $reldir) {
|
||||||
foreach (array('', '/doc') as $valdir) {
|
foreach (array('', '/doc') as $valdir) {
|
||||||
$realpath = $reldir."core/modules/holiday".$valdir;
|
$realpath = $reldir."core/modules/holiday".$valdir;
|
||||||
$dir = dol_buildpath($realpath);
|
$dir = dol_buildpath($realpath);
|
||||||
|
|
||||||
if (is_dir($dir)) {
|
if (is_dir($dir)) {
|
||||||
$handle = opendir($dir);
|
$handle = opendir($dir);
|
||||||
if (is_resource($handle)) {
|
if (is_resource($handle)) {
|
||||||
while (($file = readdir($handle)) !== false) {
|
while (($file = readdir($handle)) !== false) {
|
||||||
$filelist[] = $file;
|
$filelist[] = $file;
|
||||||
}
|
}
|
||||||
closedir($handle);
|
closedir($handle);
|
||||||
arsort($filelist);
|
arsort($filelist);
|
||||||
|
|
||||||
foreach ($filelist as $file) {
|
foreach ($filelist as $file) {
|
||||||
if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) {
|
if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) {
|
||||||
if (file_exists($dir.'/'.$file)) {
|
if (file_exists($dir.'/'.$file)) {
|
||||||
$name = substr($file, 4, dol_strlen($file) - 16);
|
$name = substr($file, 4, dol_strlen($file) - 16);
|
||||||
$classname = substr($file, 0, dol_strlen($file) - 12);
|
$classname = substr($file, 0, dol_strlen($file) - 12);
|
||||||
|
|
||||||
require_once $dir.'/'.$file;
|
require_once $dir.'/'.$file;
|
||||||
$module = new $classname($db);
|
$module = new $classname($db);
|
||||||
|
|
||||||
$modulequalified = 1;
|
$modulequalified = 1;
|
||||||
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) {
|
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) {
|
||||||
$modulequalified = 0;
|
$modulequalified = 0;
|
||||||
}
|
}
|
||||||
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) {
|
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) {
|
||||||
$modulequalified = 0;
|
$modulequalified = 0;
|
||||||
}
|
|
||||||
|
|
||||||
if ($modulequalified) {
|
|
||||||
print '<tr class="oddeven"><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>';
|
|
||||||
|
|
||||||
// Active
|
if ($modulequalified) {
|
||||||
if (in_array($name, $def)) {
|
print '<tr class="oddeven"><td width="100">';
|
||||||
print '<td class="center">'."\n";
|
print (empty($module->name) ? $name : $module->name);
|
||||||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'">';
|
print "</td><td>\n";
|
||||||
print img_picto($langs->trans("Enabled"), 'switch_on');
|
if (method_exists($module, 'info')) {
|
||||||
print '</a>';
|
print $module->info($langs);
|
||||||
|
} else {
|
||||||
|
print $module->description;
|
||||||
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
} else {
|
|
||||||
print '<td class="center">'."\n";
|
// Active
|
||||||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=set&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
|
if (in_array($name, $def)) {
|
||||||
print "</td>";
|
print '<td class="center">'."\n";
|
||||||
|
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'">';
|
||||||
|
print img_picto($langs->trans("Enabled"), 'switch_on');
|
||||||
|
print '</a>';
|
||||||
|
print '</td>';
|
||||||
|
} else {
|
||||||
|
print '<td class="center">'."\n";
|
||||||
|
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=set&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
|
||||||
|
print "</td>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($conf->global->HOLIDAY_ADDON_PDF == $name) {
|
||||||
|
print img_picto($langs->trans("Default"), 'on');
|
||||||
|
} else {
|
||||||
|
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&value='.$name.'&scan_dir='.$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"));
|
||||||
|
if ($module->type == 'pdf') {
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
||||||
|
}
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("Path").': '.preg_replace('/^\//', '', $realpath).'/'.$file;
|
||||||
|
|
||||||
|
$htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1);
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1);
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1);
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark, 1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
print '<td class="center">';
|
||||||
|
print $form->textwithpicto('', $htmltooltip, 1, 0);
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Preview
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($module->type == 'pdf') {
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
||||||
|
} else {
|
||||||
|
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
print "</tr>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default
|
|
||||||
print '<td class="center">';
|
|
||||||
if ($conf->global->HOLIDAY_ADDON_PDF == $name) {
|
|
||||||
print img_picto($langs->trans("Default"), 'on');
|
|
||||||
} else {
|
|
||||||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&value='.$name.'&scan_dir='.$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"));
|
|
||||||
if ($module->type == 'pdf') {
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
|
||||||
}
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("Path").': '.preg_replace('/^\//', '', $realpath).'/'.$file;
|
|
||||||
|
|
||||||
$htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1);
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1);
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1);
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark, 1, 1);
|
|
||||||
|
|
||||||
|
|
||||||
print '<td class="center">';
|
|
||||||
print $form->textwithpicto('', $htmltooltip, 1, 0);
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
// Preview
|
|
||||||
print '<td class="center">';
|
|
||||||
if ($module->type == 'pdf') {
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
|
||||||
} else {
|
|
||||||
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
|
||||||
}
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
print "</tr>\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -422,11 +416,11 @@ foreach ($dirmodels as $reldir) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print "<br>";
|
print "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -446,34 +440,118 @@ print '<td>'.$langs->trans("Parameter").'</td>';
|
|||||||
print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
|
print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
$substitutionarray = pdf_getSubstitutionArray($langs, array('objectamount'), null, 2);
|
/*var_dump($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_MONDAY);
|
||||||
$substitutionarray['__(AnyTranslationKey)__'] = $langs->trans("Translation");
|
var_dump($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY);
|
||||||
$htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>';
|
var_dump($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY);
|
||||||
foreach ($substitutionarray as $key => $val) {
|
var_dump($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY);
|
||||||
$htmltext .= $key.'<br>';
|
*/
|
||||||
|
if (!isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY)) {
|
||||||
|
$conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY = 1;
|
||||||
}
|
}
|
||||||
$htmltext .= '</i>';
|
if (!isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY)) {
|
||||||
|
$conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY = 1;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
var_dump($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_MONDAY);
|
||||||
|
var_dump($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY);
|
||||||
|
var_dump($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY);
|
||||||
|
var_dump($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY);
|
||||||
|
*/
|
||||||
|
|
||||||
print '<tr class="oddeven"><td colspan="2">';
|
// Set working days
|
||||||
print $form->textwithpicto($langs->trans("FreeLegalTextOnHolidays"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp');
|
print '<tr class="oddeven">';
|
||||||
print '<br>';
|
print "<td>".$langs->trans("XIsAUsualNonWorkingDay", $langs->transnoentitiesnoconv("Monday"))."</td>";
|
||||||
$variablename = 'HOLIDAY_FREE_TEXT';
|
print '<td class="center">';
|
||||||
if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) {
|
if ($conf->use_javascript_ajax) {
|
||||||
print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->$variablename.'</textarea>';
|
print ajax_constantonoff('MAIN_NON_WORKING_DAYS_INCLUDE_MONDAY', array(), null, 0);
|
||||||
} else {
|
} else {
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
if (!empty($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_MONDAY)) {
|
||||||
$doleditor = new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes');
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_other&MAIN_NON_WORKING_DAYS_INCLUDE_MONDAY=1">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
|
||||||
print $doleditor->Create();
|
} else {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_other&MAIN_NON_WORKING_DAYS_INCLUDE_MONDAY=0">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
print '</td></tr>'."\n";
|
print "</td>";
|
||||||
|
print "</tr>";
|
||||||
|
|
||||||
//Use draft Watermark
|
// Set working days
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
print "<td>".$langs->trans("XIsAUsualNonWorkingDay", $langs->transnoentitiesnoconv("Friday"))."</td>";
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($conf->use_javascript_ajax) {
|
||||||
|
print ajax_constantonoff('MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY', array(), null, 0);
|
||||||
|
} else {
|
||||||
|
if (!empty($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY)) {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_other&MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY=1">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
|
||||||
|
} else {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_other&MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY=0">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</td>";
|
||||||
|
print "</tr>";
|
||||||
|
|
||||||
print '<tr class="oddeven"><td>';
|
// Set working days
|
||||||
print $form->textwithpicto($langs->trans("WatermarkOnDraftHolidayCards"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'<br>';
|
print '<tr class="oddeven">';
|
||||||
print '</td><td>';
|
print "<td>".$langs->trans("XIsAUsualNonWorkingDay", $langs->transnoentitiesnoconv("Saturday"))."</td>";
|
||||||
print '<input class="flat minwidth200" type="text" name="HOLIDAY_DRAFT_WATERMARK" value="'.$conf->global->HOLIDAY_DRAFT_WATERMARK.'">';
|
print '<td class="center">';
|
||||||
print '</td></tr>'."\n";
|
if ($conf->use_javascript_ajax) {
|
||||||
|
print ajax_constantonoff('MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY', array(), null, 0, 0, 0, 2, 0, 1);
|
||||||
|
} else {
|
||||||
|
if (!empty($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY)) {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_other&MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY=1">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
|
||||||
|
} else {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_other&MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY=0">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</td>";
|
||||||
|
print "</tr>";
|
||||||
|
|
||||||
|
// Set working days
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
print "<td>".$langs->trans("XIsAUsualNonWorkingDay", $langs->transnoentitiesnoconv("Sunday"))."</td>";
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($conf->use_javascript_ajax) {
|
||||||
|
print ajax_constantonoff('MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY', array(), null, 0, 0, 0, 2, 0, 1);
|
||||||
|
} else {
|
||||||
|
if (!empty($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY)) {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_other&MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY=1">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
|
||||||
|
} else {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_other&MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY=0">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</td>";
|
||||||
|
print "</tr>";
|
||||||
|
|
||||||
|
if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
|
||||||
|
$substitutionarray = pdf_getSubstitutionArray($langs, array('objectamount'), null, 2);
|
||||||
|
$substitutionarray['__(AnyTranslationKey)__'] = $langs->trans("Translation");
|
||||||
|
$htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>';
|
||||||
|
foreach ($substitutionarray as $key => $val) {
|
||||||
|
$htmltext .= $key.'<br>';
|
||||||
|
}
|
||||||
|
$htmltext .= '</i>';
|
||||||
|
|
||||||
|
print '<tr class="oddeven"><td colspan="2">';
|
||||||
|
print $form->textwithpicto($langs->trans("FreeLegalTextOnHolidays"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp');
|
||||||
|
print '<br>';
|
||||||
|
$variablename = 'HOLIDAY_FREE_TEXT';
|
||||||
|
if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) {
|
||||||
|
print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->$variablename.'</textarea>';
|
||||||
|
} else {
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||||
|
$doleditor = new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes');
|
||||||
|
print $doleditor->Create();
|
||||||
|
}
|
||||||
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
|
//Use draft Watermark
|
||||||
|
|
||||||
|
print '<tr class="oddeven"><td>';
|
||||||
|
print $form->textwithpicto($langs->trans("WatermarkOnDraftHolidayCards"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'<br>';
|
||||||
|
print '</td><td>';
|
||||||
|
print '<input class="flat minwidth200" type="text" name="HOLIDAY_DRAFT_WATERMARK" value="'.$conf->global->HOLIDAY_DRAFT_WATERMARK.'">';
|
||||||
|
print '</td></tr>'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|||||||
@@ -82,7 +82,8 @@ print '<br><br>';
|
|||||||
if (empty($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY)) {
|
if (empty($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY)) {
|
||||||
$setupcompanynotcomplete = 1;
|
$setupcompanynotcomplete = 1;
|
||||||
}
|
}
|
||||||
print img_picto('', 'company', 'class="paddingright"').' '.$langs->trans("SetupDescription3", DOL_URL_ROOT.'/admin/company.php?mainmenu=home'.(empty($setupcompanynotcomplete) ? '' : '&action=edit'), $langs->transnoentities("Setup"), $langs->transnoentities("MenuCompanySetup"));
|
print img_picto('', 'company', 'class="paddingright valignmiddle double"').' '.$langs->trans("SetupDescriptionLink", DOL_URL_ROOT.'/admin/company.php?mainmenu=home'.(empty($setupcompanynotcomplete) ? '' : '&action=edit'), $langs->transnoentities("Setup"), $langs->transnoentities("MenuCompanySetup"));
|
||||||
|
print '<br><br>'.$langs->trans("SetupDescription3b");
|
||||||
if (!empty($setupcompanynotcomplete)) {
|
if (!empty($setupcompanynotcomplete)) {
|
||||||
$langs->load("errors");
|
$langs->load("errors");
|
||||||
$warnpicto = img_warning($langs->trans("WarningMandatorySetupNotComplete"), 'style="padding-right: 6px;"');
|
$warnpicto = img_warning($langs->trans("WarningMandatorySetupNotComplete"), 'style="padding-right: 6px;"');
|
||||||
@@ -93,7 +94,8 @@ print '<br>';
|
|||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
// Show info setup module
|
// Show info setup module
|
||||||
print img_picto('', 'cog', 'class="paddingright"').' '.$langs->trans("SetupDescription4", DOL_URL_ROOT.'/admin/modules.php?mainmenu=home', $langs->transnoentities("Setup"), $langs->transnoentities("Modules"));
|
print img_picto('', 'cog', 'class="paddingright valignmiddle double"').' '.$langs->trans("SetupDescriptionLink", DOL_URL_ROOT.'/admin/modules.php?mainmenu=home', $langs->transnoentities("Setup"), $langs->transnoentities("Modules"));
|
||||||
|
print '<br><br>'.$langs->trans("SetupDescription4b");
|
||||||
if (count($conf->modules) <= (empty($conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING) ? 1 : $conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING)) { // If only minimal initial modules enabled
|
if (count($conf->modules) <= (empty($conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING) ? 1 : $conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING)) { // If only minimal initial modules enabled
|
||||||
$langs->load("errors");
|
$langs->load("errors");
|
||||||
$warnpicto = img_warning($langs->trans("WarningEnableYourModulesApplications"), 'style="padding-right: 6px;"');
|
$warnpicto = img_warning($langs->trans("WarningEnableYourModulesApplications"), 'style="padding-right: 6px;"');
|
||||||
|
|||||||
@@ -230,6 +230,9 @@ if (!empty($conf->agenda->enabled)) {
|
|||||||
if (!empty($conf->eventorganization->enabled) && !empty($user->rights->eventorganization->read)) {
|
if (!empty($conf->eventorganization->enabled) && !empty($user->rights->eventorganization->read)) {
|
||||||
$elementList['eventorganization_send'] = img_picto('', 'action', 'class="paddingright"').dol_escape_htmltag($langs->trans('MailToSendEventOrganization'));
|
$elementList['eventorganization_send'] = img_picto('', 'action', 'class="paddingright"').dol_escape_htmltag($langs->trans('MailToSendEventOrganization'));
|
||||||
}
|
}
|
||||||
|
if (!empty($conf->partnership->enabled) && !empty($user->rights->partnership->read)) {
|
||||||
|
$elementList['partnership_send'] = img_picto('', 'partnership', 'class="paddingright"').dol_escape_htmltag($langs->trans('MailToPartnership'));
|
||||||
|
}
|
||||||
|
|
||||||
$parameters = array('elementList'=>$elementList);
|
$parameters = array('elementList'=>$elementList);
|
||||||
$reshook = $hookmanager->executeHooks('emailElementlist', $parameters); // Note that $action and $object may have been modified by some hooks
|
$reshook = $hookmanager->executeHooks('emailElementlist', $parameters); // Note that $action and $object may have been modified by some hooks
|
||||||
|
|||||||
@@ -53,6 +53,16 @@ if ($cancel) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'update') {
|
if ($action == 'update') {
|
||||||
|
if (GETPOSTISSET('PROPOSAL_PDF_HIDE_PAYMENTTERM')) {
|
||||||
|
dolibarr_set_const($db, "PROPOSAL_PDF_HIDE_PAYMENTTERM", GETPOST("PROPOSAL_PDF_HIDE_PAYMENTTERM"), 'chaine', 0, '', $conf->entity);
|
||||||
|
}
|
||||||
|
if (GETPOSTISSET('PROPOSAL_PDF_HIDE_PAYMENTMODE')) {
|
||||||
|
dolibarr_set_const($db, "PROPOSAL_PDF_HIDE_PAYMENTMODE", GETPOST("PROPOSAL_PDF_HIDE_PAYMENTMODE"), 'chaine', 0, '', $conf->entity);
|
||||||
|
}
|
||||||
|
if (GETPOSTISSET('MAIN_GENERATE_PROPOSALS_WITH_PICTURE')) {
|
||||||
|
dolibarr_set_const($db, "MAIN_GENERATE_PROPOSALS_WITH_PICTURE", GETPOST("MAIN_GENERATE_PROPOSALS_WITH_PICTURE"), 'chaine', 0, '', $conf->entity);
|
||||||
|
}
|
||||||
|
|
||||||
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||||
|
|
||||||
header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
|
header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
|
||||||
@@ -103,6 +113,26 @@ if ($conf->use_javascript_ajax) {
|
|||||||
}
|
}
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("PROPOSAL_PDF_HIDE_PAYMENTTERM");
|
||||||
|
print '</td><td>';
|
||||||
|
if ($conf->use_javascript_ajax) {
|
||||||
|
print ajax_constantonoff('PROPOSAL_PDF_HIDE_PAYMENTTERM');
|
||||||
|
} else {
|
||||||
|
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||||
|
print $form->selectarray("PROPOSAL_PDF_HIDE_PAYMENTTERM", $arrval, $conf->global->PROPOSAL_PDF_HIDE_PAYMENTTERM);
|
||||||
|
}
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("PROPOSAL_PDF_HIDE_PAYMENTMODE");
|
||||||
|
print '</td><td>';
|
||||||
|
if ($conf->use_javascript_ajax) {
|
||||||
|
print ajax_constantonoff('PROPOSAL_PDF_HIDE_PAYMENTMODE');
|
||||||
|
} else {
|
||||||
|
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||||
|
print $form->selectarray("PROPOSAL_PDF_HIDE_PAYMENTMODE", $arrval, $conf->global->PROPOSAL_PDF_HIDE_PAYMENTMODE);
|
||||||
|
}
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING").'</td><td>';
|
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING").'</td><td>';
|
||||||
if ($conf->use_javascript_ajax) {
|
if ($conf->use_javascript_ajax) {
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ print "<strong>PHP session.cookie_samesite</strong> = ".(ini_get('session.cookie
|
|||||||
print "<strong>PHP open_basedir</strong> = ".(ini_get('open_basedir') ? ini_get('open_basedir') : yn(0).' <span class="opacitymedium">('.$langs->trans("RecommendedValueIs", $langs->transnoentitiesnoconv("ARestrictedPath").', '.$langs->transnoentitiesnoconv("Example").' '.$_SERVER["DOCUMENT_ROOT"]).')</span>')."<br>\n";
|
print "<strong>PHP open_basedir</strong> = ".(ini_get('open_basedir') ? ini_get('open_basedir') : yn(0).' <span class="opacitymedium">('.$langs->trans("RecommendedValueIs", $langs->transnoentitiesnoconv("ARestrictedPath").', '.$langs->transnoentitiesnoconv("Example").' '.$_SERVER["DOCUMENT_ROOT"]).')</span>')."<br>\n";
|
||||||
print "<strong>PHP allow_url_fopen</strong> = ".(ini_get('allow_url_fopen') ? img_picto($langs->trans("YouShouldSetThisToOff"), 'warning').' '.ini_get('allow_url_fopen') : yn(0)).' <span class="opacitymedium">('.$langs->trans("RecommendedValueIs", $langs->transnoentitiesnoconv("No")).")</span><br>\n";
|
print "<strong>PHP allow_url_fopen</strong> = ".(ini_get('allow_url_fopen') ? img_picto($langs->trans("YouShouldSetThisToOff"), 'warning').' '.ini_get('allow_url_fopen') : yn(0)).' <span class="opacitymedium">('.$langs->trans("RecommendedValueIs", $langs->transnoentitiesnoconv("No")).")</span><br>\n";
|
||||||
print "<strong>PHP allow_url_include</strong> = ".(ini_get('allow_url_include') ? img_picto($langs->trans("YouShouldSetThisToOff"), 'warning').' '.ini_get('allow_url_include') : yn(0)).' <span class="opacitymedium">('.$langs->trans("RecommendedValueIs", $langs->transnoentitiesnoconv("No")).")</span><br>\n";
|
print "<strong>PHP allow_url_include</strong> = ".(ini_get('allow_url_include') ? img_picto($langs->trans("YouShouldSetThisToOff"), 'warning').' '.ini_get('allow_url_include') : yn(0)).' <span class="opacitymedium">('.$langs->trans("RecommendedValueIs", $langs->transnoentitiesnoconv("No")).")</span><br>\n";
|
||||||
print "<strong>PHP safe_mode</strong> = ".(ini_get('safe_mode') ? ini_get('safe_mode') : yn(0)).' <span class="opacitymedium">'.$langs->trans("Deprecated")." (removed in PHP 5.4)</span><br>\n";
|
//print "<strong>PHP safe_mode</strong> = ".(ini_get('safe_mode') ? ini_get('safe_mode') : yn(0)).' <span class="opacitymedium">'.$langs->trans("Deprecated")." (removed in PHP 5.4)</span><br>\n";
|
||||||
print "<strong>PHP disable_functions</strong> = ";
|
print "<strong>PHP disable_functions</strong> = ";
|
||||||
$arrayoffunctionsdisabled = explode(',', ini_get('disable_functions'));
|
$arrayoffunctionsdisabled = explode(',', ini_get('disable_functions'));
|
||||||
$arrayoffunctionstodisable = explode(',', 'pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals');
|
$arrayoffunctionstodisable = explode(',', 'pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals');
|
||||||
@@ -249,7 +249,7 @@ if (empty($dolibarr_main_prod)) {
|
|||||||
}
|
}
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<strong>$dolibarr_nocsrfcheck</strong>: '.$dolibarr_nocsrfcheck;
|
print '<strong>$dolibarr_nocsrfcheck</strong>: '.(empty($dolibarr_nocsrfcheck) ? '0' : $dolibarr_nocsrfcheck);
|
||||||
if (!empty($dolibarr_nocsrfcheck)) {
|
if (!empty($dolibarr_nocsrfcheck)) {
|
||||||
print ' '.img_picto('', 'warning').' '.$langs->trans("IfYouAreOnAProductionSetThis", 0);
|
print ' '.img_picto('', 'warning').' '.$langs->trans("IfYouAreOnAProductionSetThis", 0);
|
||||||
}
|
}
|
||||||
@@ -350,7 +350,7 @@ if (empty($conf->global->MAIN_SECURITY_HASH_ALGO)) {
|
|||||||
if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') {
|
if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') {
|
||||||
print '<br><strong>MAIN_SECURITY_SALT</strong> = '.(empty($conf->global->MAIN_SECURITY_SALT) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->MAIN_SECURITY_SALT).'<br>';
|
print '<br><strong>MAIN_SECURITY_SALT</strong> = '.(empty($conf->global->MAIN_SECURITY_SALT) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->MAIN_SECURITY_SALT).'<br>';
|
||||||
} else {
|
} else {
|
||||||
print '<span class="opacitymedium">('.$langs->trans("Recommanded").': password_hash)</span>';
|
print '<span class="opacitymedium">('.$langs->trans("Recommended").': password_hash)</span>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
}
|
}
|
||||||
if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') {
|
if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') {
|
||||||
@@ -363,16 +363,19 @@ if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') {
|
|||||||
}
|
}
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<strong>MAIN_SECURITY_ANTI_SSRF_SERVER_IP</strong> = '.(empty($conf->global->MAIN_SECURITY_ANTI_SSRF_SERVER_IP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span> <span class="opacitymedium">('.$langs->trans("Example").': static-ips-of-server - '.$langs->trans("Note").': common loopback ip like 127.*.*.*, [::1] are already added)</span>' : $conf->global->MAIN_SECURITY_ANTI_SSRF_SERVER_IP)."<br>";
|
print '<strong>MAIN_SECURITY_ANTI_SSRF_SERVER_IP</strong> = '.(empty($conf->global->MAIN_SECURITY_ANTI_SSRF_SERVER_IP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span> <span class="opacitymedium">('.$langs->trans("Recommended").': List of static IPs of server separated with coma - '.$langs->trans("Note").': common loopback ip like 127.*.*.*, [::1] are already added)</span>' : $conf->global->MAIN_SECURITY_ANTI_SSRF_SERVER_IP)."<br>";
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<strong>MAIN_ALLOW_SVG_FILES_AS_IMAGES</strong> = '.(empty($conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES) ? '0 <span class="opacitymedium">('.$langs->trans("Recommanded").': 0)</span>' : $conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES)."<br>";
|
print '<strong>MAIN_ALLOW_SVG_FILES_AS_IMAGES</strong> = '.(empty($conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES) ? '0' : $conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES).' <span class="opacitymedium">('.$langs->trans("Recommended").': 0)</span><br>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<strong>MAIN_RESTRICTHTML_ONLY_VALID_HTML</strong> = '.(empty($conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML) ? '<span class="opacitymedium">'.$langs->trans("Undefined").' ('.$langs->trans("Recommanded").': 1)</span>' : $conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML)."<br>";
|
print '<strong>MAIN_ALWAYS_CREATE_LOCK_AFTER_LAST_UPGRADE</strong> = '.(empty($conf->global->MAIN_ALWAYS_CREATE_LOCK_AFTER_LAST_UPGRADE) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->MAIN_ALWAYS_CREATE_LOCK_AFTER_LAST_UPGRADE).' <span class="opacitymedium">('.$langs->trans("Recommended").': 1)</span><br>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<strong>MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES</strong> = '.(empty($conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES) ? '<span class="opacitymedium">'.$langs->trans("Undefined").' ('.$langs->trans("Recommanded").': 1)</span>' : $conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES)."<br>";
|
print '<strong>MAIN_RESTRICTHTML_ONLY_VALID_HTML</strong> = '.(empty($conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML) ? '<span class="opacitymedium">'.$langs->trans("Undefined").' ('.$langs->trans("Recommended").': 1)</span>' : $conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML)."<br>";
|
||||||
|
print '<br>';
|
||||||
|
|
||||||
|
print '<strong>MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES</strong> = '.(empty($conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES) ? '<span class="opacitymedium">'.$langs->trans("Undefined").' ('.$langs->trans("Recommended").': 1)</span>' : $conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES)."<br>";
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<strong>MAIN_EXEC_USE_POPEN</strong> = ';
|
print '<strong>MAIN_EXEC_USE_POPEN</strong> = ';
|
||||||
@@ -382,10 +385,14 @@ if (empty($conf->global->MAIN_EXEC_USE_POPEN)) {
|
|||||||
print $conf->global->MAIN_EXEC_USE_POPEN;
|
print $conf->global->MAIN_EXEC_USE_POPEN;
|
||||||
}
|
}
|
||||||
if ($execmethod == 1) {
|
if ($execmethod == 1) {
|
||||||
print ' <span class="opacitymedium">("exec" PHP method will be used for shell commands)</span>';
|
print '<span class="opacitymedium">, "exec" PHP method will be used for shell commands';
|
||||||
|
print ' ('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or").' 1)';
|
||||||
|
print '</span>';
|
||||||
}
|
}
|
||||||
if ($execmethod == 2) {
|
if ($execmethod == 2) {
|
||||||
print ' <span class="opacitymedium">("popen" PHP method will be used for shell commands)</span>';
|
print '<span class="opacitymedium">, "popen" PHP method will be used for shell commands';
|
||||||
|
print ' ('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or").' 1)';
|
||||||
|
print '</span>';
|
||||||
}
|
}
|
||||||
print "<br>";
|
print "<br>";
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|||||||
@@ -91,15 +91,21 @@ $workflowcodes = array(
|
|||||||
),
|
),
|
||||||
|
|
||||||
// Automatic classification of order
|
// Automatic classification of order
|
||||||
'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING'=>array(
|
'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING'=>array( // when shipping validated
|
||||||
'family'=>'classify_order',
|
'family'=>'classify_order',
|
||||||
'position'=>40,
|
'position'=>40,
|
||||||
'enabled'=>(!empty($conf->expedition->enabled) && !empty($conf->commande->enabled)),
|
'enabled'=>(!empty($conf->expedition->enabled) && !empty($conf->commande->enabled)),
|
||||||
'picto'=>'order'
|
'picto'=>'order'
|
||||||
),
|
),
|
||||||
'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER'=>array(
|
'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED'=>array( // when shipping closed
|
||||||
'family'=>'classify_order',
|
'family'=>'classify_order',
|
||||||
'position'=>41,
|
'position'=>41,
|
||||||
|
'enabled'=>(!empty($conf->expedition->enabled) && !empty($conf->commande->enabled)),
|
||||||
|
'picto'=>'order'
|
||||||
|
),
|
||||||
|
'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER'=>array(
|
||||||
|
'family'=>'classify_order',
|
||||||
|
'position'=>42,
|
||||||
'enabled'=>(!empty($conf->facture->enabled) && !empty($conf->commande->enabled)),
|
'enabled'=>(!empty($conf->facture->enabled) && !empty($conf->commande->enabled)),
|
||||||
'picto'=>'order',
|
'picto'=>'order',
|
||||||
'warning'=>''
|
'warning'=>''
|
||||||
|
|||||||
@@ -72,10 +72,12 @@ function printDropdownBookmarksList()
|
|||||||
// Url to go on create new bookmark page
|
// Url to go on create new bookmark page
|
||||||
$newbtn = '';
|
$newbtn = '';
|
||||||
if (!empty($user->rights->bookmark->creer)) {
|
if (!empty($user->rights->bookmark->creer)) {
|
||||||
//$urltoadd=DOL_URL_ROOT.'/bookmarks/card.php?action=create&urlsource='.urlencode($url).'&url='.urlencode($url);
|
if (!preg_match('/bookmarks\/card.php/', $_SERVER['PHP_SELF'])) {
|
||||||
$urltoadd = DOL_URL_ROOT.'/bookmarks/card.php?action=create&url='.urlencode($url);
|
//$urltoadd=DOL_URL_ROOT.'/bookmarks/card.php?action=create&urlsource='.urlencode($url).'&url='.urlencode($url);
|
||||||
$newbtn .= '<a class="top-menu-dropdown-link" title="'.$langs->trans('AddThisPageToBookmarks').'" href="'.dol_escape_htmltag($urltoadd).'" >';
|
$urltoadd = DOL_URL_ROOT.'/bookmarks/card.php?action=create&url='.urlencode($url);
|
||||||
$newbtn .= img_picto('', 'add', '', false, 0, 0, '', 'paddingright').dol_escape_htmltag($langs->trans('AddThisPageToBookmarks')).'</a>';
|
$newbtn .= '<a class="top-menu-dropdown-link" title="'.$langs->trans('AddThisPageToBookmarks').'" href="'.dol_escape_htmltag($urltoadd).'" >';
|
||||||
|
$newbtn .= img_picto('', 'add', '', false, 0, 0, '', 'paddingright').dol_escape_htmltag($langs->trans('AddThisPageToBookmarks')).'</a>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Menu with list of bookmarks
|
// Menu with list of bookmarks
|
||||||
@@ -105,9 +107,11 @@ function printDropdownBookmarksList()
|
|||||||
$searchForm .= dol_escape_htmltag($user->rights->bookmark->creer ? $langs->trans('EditBookmarks') : $langs->trans('ListOfBookmarks')).'...</option>';
|
$searchForm .= dol_escape_htmltag($user->rights->bookmark->creer ? $langs->trans('EditBookmarks') : $langs->trans('ListOfBookmarks')).'...</option>';
|
||||||
// Url to go on create new bookmark page
|
// Url to go on create new bookmark page
|
||||||
if (!empty($user->rights->bookmark->creer)) {
|
if (!empty($user->rights->bookmark->creer)) {
|
||||||
$urltoadd = DOL_URL_ROOT.'/bookmarks/card.php?action=create&url='.urlencode($url);
|
if (!preg_match('/bookmarks\/card.php/', $_SERVER['PHP_SELF'])) {
|
||||||
$searchForm .= '<option value="newbookmark" class="optionblue" rel="'.dol_escape_htmltag($urltoadd).'"';
|
$urltoadd = DOL_URL_ROOT.'/bookmarks/card.php?action=create&url='.urlencode($url);
|
||||||
$searchForm .= ' data-html="'.dol_escape_htmltag(img_picto('', 'bookmark').' '.$langs->trans('AddThisPageToBookmarks').'...').'">'.dol_escape_htmltag($langs->trans('AddThisPageToBookmarks').'...').'</option>';
|
$searchForm .= '<option value="newbookmark" class="optionblue" rel="'.dol_escape_htmltag($urltoadd).'"';
|
||||||
|
$searchForm .= ' data-html="'.dol_escape_htmltag(img_picto('', 'bookmark').' '.$langs->trans('AddThisPageToBookmarks').'...').'">'.dol_escape_htmltag($langs->trans('AddThisPageToBookmarks').'...').'</option>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$i = 0;
|
$i = 0;
|
||||||
while ((empty($conf->global->BOOKMARKS_SHOW_IN_MENU) || $i < $conf->global->BOOKMARKS_SHOW_IN_MENU) && $obj = $db->fetch_object($resql)) {
|
while ((empty($conf->global->BOOKMARKS_SHOW_IN_MENU) || $i < $conf->global->BOOKMARKS_SHOW_IN_MENU) && $obj = $db->fetch_object($resql)) {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ $action = GETPOST("action", "alpha");
|
|||||||
$title = (string) GETPOST("title", "alpha");
|
$title = (string) GETPOST("title", "alpha");
|
||||||
$url = (string) GETPOST("url", "alpha");
|
$url = (string) GETPOST("url", "alpha");
|
||||||
$urlsource = GETPOST("urlsource", "alpha");
|
$urlsource = GETPOST("urlsource", "alpha");
|
||||||
$target = GETPOST("target", "alpha");
|
$target = GETPOST("target", "int");
|
||||||
$userid = GETPOST("userid", "int");
|
$userid = GETPOST("userid", "int");
|
||||||
$position = GETPOST("position", "int");
|
$position = GETPOST("position", "int");
|
||||||
$backtopage = GETPOST('backtopage', 'alpha');
|
$backtopage = GETPOST('backtopage', 'alpha');
|
||||||
@@ -169,7 +169,7 @@ if ($action == 'create') {
|
|||||||
// Target
|
// Target
|
||||||
print '<tr><td>'.$langs->trans("BehaviourOnClick").'</td><td>';
|
print '<tr><td>'.$langs->trans("BehaviourOnClick").'</td><td>';
|
||||||
$liste = array(0=>$langs->trans("ReplaceWindow"), 1=>$langs->trans("OpenANewWindow"));
|
$liste = array(0=>$langs->trans("ReplaceWindow"), 1=>$langs->trans("OpenANewWindow"));
|
||||||
print $form->selectarray('target', $liste, 1);
|
print $form->selectarray('target', $liste, GETPOSTISSET('target') ? GETPOST('target', 'int') : 1);
|
||||||
print '</td><td class="hideonsmartphone"><span class="opacitymedium">'.$langs->trans("ChooseIfANewWindowMustBeOpenedOnClickOnBookmark").'</span></td></tr>';
|
print '</td><td class="hideonsmartphone"><span class="opacitymedium">'.$langs->trans("ChooseIfANewWindowMustBeOpenedOnClickOnBookmark").'</span></td></tr>';
|
||||||
|
|
||||||
// Owner
|
// Owner
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ class ActionComm extends CommonObject
|
|||||||
/**
|
/**
|
||||||
* @var int socpeople id linked to action
|
* @var int socpeople id linked to action
|
||||||
*/
|
*/
|
||||||
public $contactid;
|
public $contact_id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Societe|null Company linked to action (optional)
|
* @var Societe|null Company linked to action (optional)
|
||||||
@@ -273,7 +273,7 @@ class ActionComm extends CommonObject
|
|||||||
/**
|
/**
|
||||||
* @var Contact|null Contact linked to action (optional)
|
* @var Contact|null Contact linked to action (optional)
|
||||||
* @deprecated
|
* @deprecated
|
||||||
* @see $contactid
|
* @see $contact_id
|
||||||
*/
|
*/
|
||||||
public $contact;
|
public $contact;
|
||||||
|
|
||||||
|
|||||||
@@ -2594,7 +2594,7 @@ if ($action == 'create') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create an invoice and classify billed
|
// Create an invoice and classify billed
|
||||||
if ($object->statut == Propal::STATUS_SIGNED) {
|
if ($object->statut == Propal::STATUS_SIGNED && empty($conf->global->PROPOSAL_ARE_NOT_BILLABLE)) {
|
||||||
if (!empty($conf->facture->enabled) && $usercancreateinvoice) {
|
if (!empty($conf->facture->enabled) && $usercancreateinvoice) {
|
||||||
print '<a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddBill").'</a>';
|
print '<a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddBill").'</a>';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,6 +187,7 @@ $arrayfields = array(
|
|||||||
'c.multicurrency_total_vat'=>array('label'=>'MulticurrencyAmountVAT', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>105),
|
'c.multicurrency_total_vat'=>array('label'=>'MulticurrencyAmountVAT', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>105),
|
||||||
'c.multicurrency_total_ttc'=>array('label'=>'MulticurrencyAmountTTC', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>110),
|
'c.multicurrency_total_ttc'=>array('label'=>'MulticurrencyAmountTTC', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>110),
|
||||||
'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>115),
|
'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>115),
|
||||||
|
'sale_representative'=>array('label'=>"SaleRepresentativesOfThirdParty", 'checked'=>0, 'position'=>116),
|
||||||
'c.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>120),
|
'c.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>120),
|
||||||
'c.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>125),
|
'c.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>125),
|
||||||
'c.date_cloture'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>130),
|
'c.date_cloture'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>130),
|
||||||
@@ -1180,6 +1181,9 @@ if ($resql) {
|
|||||||
print '<input class="flat" size="4" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).'">';
|
print '<input class="flat" size="4" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
if (!empty($arrayfields['sale_representative']['checked'])) {
|
||||||
|
print '<td class="liste_titre"></td>';
|
||||||
|
}
|
||||||
// Extra fields
|
// Extra fields
|
||||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
|
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
|
||||||
// Fields from hook
|
// Fields from hook
|
||||||
@@ -1338,6 +1342,9 @@ if ($resql) {
|
|||||||
if (!empty($arrayfields['u.login']['checked'])) {
|
if (!empty($arrayfields['u.login']['checked'])) {
|
||||||
print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder);
|
print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder);
|
||||||
}
|
}
|
||||||
|
if (!empty($arrayfields['sale_representative']['checked'])) {
|
||||||
|
print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "", "", "$param", '', $sortfield, $sortorder);
|
||||||
|
}
|
||||||
|
|
||||||
// Extra fields
|
// Extra fields
|
||||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
|
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
|
||||||
@@ -1715,6 +1722,53 @@ if ($resql) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($arrayfields['sale_representative']['checked'])) {
|
||||||
|
// Sales representatives
|
||||||
|
print '<td>';
|
||||||
|
if ($obj->socid > 0) {
|
||||||
|
$listsalesrepresentatives = $companystatic->getSalesRepresentatives($user);
|
||||||
|
if ($listsalesrepresentatives < 0) {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
$nbofsalesrepresentative = count($listsalesrepresentatives);
|
||||||
|
if ($nbofsalesrepresentative > 6) {
|
||||||
|
// We print only number
|
||||||
|
print $nbofsalesrepresentative;
|
||||||
|
} elseif ($nbofsalesrepresentative > 0) {
|
||||||
|
$j = 0;
|
||||||
|
foreach ($listsalesrepresentatives as $val) {
|
||||||
|
$userstatic->id = $val['id'];
|
||||||
|
$userstatic->lastname = $val['lastname'];
|
||||||
|
$userstatic->firstname = $val['firstname'];
|
||||||
|
$userstatic->email = $val['email'];
|
||||||
|
$userstatic->statut = $val['statut'];
|
||||||
|
$userstatic->entity = $val['entity'];
|
||||||
|
$userstatic->photo = $val['photo'];
|
||||||
|
$userstatic->login = $val['login'];
|
||||||
|
$userstatic->office_phone = $val['office_phone'];
|
||||||
|
$userstatic->office_fax = $val['office_fax'];
|
||||||
|
$userstatic->user_mobile = $val['user_mobile'];
|
||||||
|
$userstatic->job = $val['job'];
|
||||||
|
$userstatic->gender = $val['gender'];
|
||||||
|
//print '<div class="float">':
|
||||||
|
print ($nbofsalesrepresentative < 2) ? $userstatic->getNomUrl(-1, '', 0, 0, 12) : $userstatic->getNomUrl(-2);
|
||||||
|
$j++;
|
||||||
|
if ($j < $nbofsalesrepresentative) {
|
||||||
|
print ' ';
|
||||||
|
}
|
||||||
|
//print '</div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//else print $langs->trans("NoSalesRepresentativeAffected");
|
||||||
|
} else {
|
||||||
|
print ' ';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
if (!$i) {
|
||||||
|
$totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Extra fields
|
// Extra fields
|
||||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
|
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
|
||||||
// Fields from hook
|
// Fields from hook
|
||||||
|
|||||||
@@ -1519,6 +1519,12 @@ class Account extends CommonObject
|
|||||||
*/
|
*/
|
||||||
public function needIBAN()
|
public function needIBAN()
|
||||||
{
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
if (!empty($conf->global->MAIN_IBAN_IS_NEVER_MANDATORY)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
$country_code = $this->getCountryCode();
|
$country_code = $this->getCountryCode();
|
||||||
|
|
||||||
$country_code_in_EEC = array(
|
$country_code_in_EEC = array(
|
||||||
|
|||||||
@@ -234,6 +234,7 @@ $arrayfields = array(
|
|||||||
'dynamount_payed'=>array('label'=>"Received", 'checked'=>0, 'position'=>140),
|
'dynamount_payed'=>array('label'=>"Received", 'checked'=>0, 'position'=>140),
|
||||||
'rtp'=>array('label'=>"Rest", 'checked'=>0, 'position'=>150), // Not enabled by default because slow
|
'rtp'=>array('label'=>"Rest", 'checked'=>0, 'position'=>150), // Not enabled by default because slow
|
||||||
'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>165),
|
'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>165),
|
||||||
|
'sale_representative'=>array('label'=>"SaleRepresentativesOfThirdParty", 'checked'=>0, 'position'=>166),
|
||||||
'f.multicurrency_code'=>array('label'=>'Currency', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>170),
|
'f.multicurrency_code'=>array('label'=>'Currency', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>170),
|
||||||
'f.multicurrency_tx'=>array('label'=>'CurrencyRate', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>171),
|
'f.multicurrency_tx'=>array('label'=>'CurrencyRate', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>171),
|
||||||
'f.multicurrency_total_ht'=>array('label'=>'MulticurrencyAmountHT', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>180),
|
'f.multicurrency_total_ht'=>array('label'=>'MulticurrencyAmountHT', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1), 'position'=>180),
|
||||||
@@ -1257,6 +1258,9 @@ if ($resql) {
|
|||||||
print '<input class="flat" size="4" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).'">';
|
print '<input class="flat" size="4" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
if (!empty($arrayfields['sale_representative']['checked'])) {
|
||||||
|
print '<td class="liste_titre"></td>';
|
||||||
|
}
|
||||||
if (!empty($arrayfields['f.retained_warranty']['checked'])) {
|
if (!empty($arrayfields['f.retained_warranty']['checked'])) {
|
||||||
print '<td class="liste_titre" align="right">';
|
print '<td class="liste_titre" align="right">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
@@ -1449,6 +1453,9 @@ if ($resql) {
|
|||||||
if (!empty($arrayfields['u.login']['checked'])) {
|
if (!empty($arrayfields['u.login']['checked'])) {
|
||||||
print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder);
|
print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder);
|
||||||
}
|
}
|
||||||
|
if (!empty($arrayfields['sale_representative']['checked'])) {
|
||||||
|
print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "", "", "$param", '', $sortfield, $sortorder);
|
||||||
|
}
|
||||||
if (!empty($arrayfields['f.retained_warranty']['checked'])) {
|
if (!empty($arrayfields['f.retained_warranty']['checked'])) {
|
||||||
print_liste_field_titre($arrayfields['f.retained_warranty']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'align="right"', $sortfield, $sortorder);
|
print_liste_field_titre($arrayfields['f.retained_warranty']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'align="right"', $sortfield, $sortorder);
|
||||||
}
|
}
|
||||||
@@ -1939,6 +1946,53 @@ if ($resql) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($arrayfields['sale_representative']['checked'])) {
|
||||||
|
// Sales representatives
|
||||||
|
print '<td>';
|
||||||
|
if ($obj->socid > 0) {
|
||||||
|
$listsalesrepresentatives = $thirdpartystatic->getSalesRepresentatives($user);
|
||||||
|
if ($listsalesrepresentatives < 0) {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
$nbofsalesrepresentative = count($listsalesrepresentatives);
|
||||||
|
if ($nbofsalesrepresentative > 6) {
|
||||||
|
// We print only number
|
||||||
|
print $nbofsalesrepresentative;
|
||||||
|
} elseif ($nbofsalesrepresentative > 0) {
|
||||||
|
$j = 0;
|
||||||
|
foreach ($listsalesrepresentatives as $val) {
|
||||||
|
$userstatic->id = $val['id'];
|
||||||
|
$userstatic->lastname = $val['lastname'];
|
||||||
|
$userstatic->firstname = $val['firstname'];
|
||||||
|
$userstatic->email = $val['email'];
|
||||||
|
$userstatic->statut = $val['statut'];
|
||||||
|
$userstatic->entity = $val['entity'];
|
||||||
|
$userstatic->photo = $val['photo'];
|
||||||
|
$userstatic->login = $val['login'];
|
||||||
|
$userstatic->office_phone = $val['office_phone'];
|
||||||
|
$userstatic->office_fax = $val['office_fax'];
|
||||||
|
$userstatic->user_mobile = $val['user_mobile'];
|
||||||
|
$userstatic->job = $val['job'];
|
||||||
|
$userstatic->gender = $val['gender'];
|
||||||
|
//print '<div class="float">':
|
||||||
|
print ($nbofsalesrepresentative < 2) ? $userstatic->getNomUrl(-1, '', 0, 0, 12) : $userstatic->getNomUrl(-2);
|
||||||
|
$j++;
|
||||||
|
if ($j < $nbofsalesrepresentative) {
|
||||||
|
print ' ';
|
||||||
|
}
|
||||||
|
//print '</div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//else print $langs->trans("NoSalesRepresentativeAffected");
|
||||||
|
} else {
|
||||||
|
print ' ';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
if (!$i) {
|
||||||
|
$totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($arrayfields['f.retained_warranty']['checked'])) {
|
if (!empty($arrayfields['f.retained_warranty']['checked'])) {
|
||||||
print '<td align="right amount">'.(!empty($obj->retained_warranty) ?price($obj->retained_warranty).'%' : ' ').'</td>';
|
print '<td align="right amount">'.(!empty($obj->retained_warranty) ?price($obj->retained_warranty).'%' : ' ').'</td>';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,7 +200,8 @@ if ($id > 0 || $ref) {
|
|||||||
|
|
||||||
//print '<tr><td class="titlefield">'.$langs->trans("Ref").'</td><td>'.$object->getNomUrl(1).'</td></tr>';
|
//print '<tr><td class="titlefield">'.$langs->trans("Ref").'</td><td>'.$object->getNomUrl(1).'</td></tr>';
|
||||||
print '<tr><td class="titlefield">'.$langs->trans("Date").'</td><td>'.dol_print_date($object->datec, 'day').'</td></tr>';
|
print '<tr><td class="titlefield">'.$langs->trans("Date").'</td><td>'.dol_print_date($object->datec, 'day').'</td></tr>';
|
||||||
print '<tr><td>'.$langs->trans("Amount").'</td><td>'.price($object->amount).'</td></tr>';
|
|
||||||
|
print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($object->amount).'</span></td></tr>';
|
||||||
|
|
||||||
// Status
|
// Status
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -82,7 +82,8 @@ class BonPrelevement extends CommonObject
|
|||||||
|
|
||||||
const STATUS_DRAFT = 0;
|
const STATUS_DRAFT = 0;
|
||||||
const STATUS_TRANSFERED = 1;
|
const STATUS_TRANSFERED = 1;
|
||||||
const STATUS_CREDITED = 2;
|
const STATUS_CREDITED = 2; // STATUS_CREDITED and STATUS_DEBITED is same. Difference is in ->type
|
||||||
|
const STATUS_DEBITED = 2; // STATUS_CREDITED and STATUS_DEBITED is same. Difference is in ->type
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2343,17 +2344,22 @@ class BonPrelevement extends CommonObject
|
|||||||
//$langs->load("mymodule");
|
//$langs->load("mymodule");
|
||||||
$this->labelStatus[self::STATUS_DRAFT] = $langs->trans('StatusWaiting');
|
$this->labelStatus[self::STATUS_DRAFT] = $langs->trans('StatusWaiting');
|
||||||
$this->labelStatus[self::STATUS_TRANSFERED] = $langs->trans('StatusTrans');
|
$this->labelStatus[self::STATUS_TRANSFERED] = $langs->trans('StatusTrans');
|
||||||
$this->labelStatus[self::STATUS_CREDITED] = $langs->trans('StatusCredited');
|
|
||||||
$this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('StatusWaiting');
|
$this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('StatusWaiting');
|
||||||
$this->labelStatusShort[self::STATUS_TRANSFERED] = $langs->trans('StatusTrans');
|
$this->labelStatusShort[self::STATUS_TRANSFERED] = $langs->trans('StatusTrans');
|
||||||
$this->labelStatusShort[self::STATUS_CREDITED] = $langs->trans('StatusCredited');
|
if ($this->type == 'bank-transfer') {
|
||||||
|
$this->labelStatus[self::STATUS_DEBITED] = $langs->trans('StatusDebited');
|
||||||
|
$this->labelStatusShort[self::STATUS_DEBITED] = $langs->trans('StatusDebited');
|
||||||
|
} else {
|
||||||
|
$this->labelStatus[self::STATUS_CREDITED] = $langs->trans('StatusCredited');
|
||||||
|
$this->labelStatusShort[self::STATUS_CREDITED] = $langs->trans('StatusCredited');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$statusType = 'status1';
|
$statusType = 'status1';
|
||||||
if ($status == self::STATUS_TRANSFERED) {
|
if ($status == self::STATUS_TRANSFERED) {
|
||||||
$statusType = 'status3';
|
$statusType = 'status3';
|
||||||
}
|
}
|
||||||
if ($status == self::STATUS_CREDITED) {
|
if ($status == self::STATUS_CREDITED || $status == self::STATUS_DEBITED) {
|
||||||
$statusType = 'status6';
|
$statusType = 'status6';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ require '../../main.inc.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
|
||||||
|
|
||||||
@@ -135,6 +136,7 @@ if (empty($reshook)) {
|
|||||||
|
|
||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
$formother = new FormOther($db);
|
$formother = new FormOther($db);
|
||||||
|
$formfile = new FormFile($db);
|
||||||
$tva_static = new Tva($db);
|
$tva_static = new Tva($db);
|
||||||
$bankstatic = new Account($db);
|
$bankstatic = new Account($db);
|
||||||
$accountingjournal = new AccountingJournal($db);
|
$accountingjournal = new AccountingJournal($db);
|
||||||
@@ -445,7 +447,13 @@ while ($i < min($num, $limit)) {
|
|||||||
|
|
||||||
// Ref
|
// Ref
|
||||||
if (!empty($arrayfields['t.rowid']['checked'])) {
|
if (!empty($arrayfields['t.rowid']['checked'])) {
|
||||||
print '<td>'.$tva_static->getNomUrl(1).'</td>';
|
print '<td>';
|
||||||
|
print $tva_static->getNomUrl(1);
|
||||||
|
$filename = dol_sanitizeFileName($tva_static->ref);
|
||||||
|
$filedir = $conf->tax->dir_output.'/vat/'.dol_sanitizeFileName($tva_static->ref);
|
||||||
|
$urlsource = $_SERVER['PHP_SELF'].'?id='.$tva_static->id;
|
||||||
|
print $formfile->getDocumentsLink($tva_static->element, $filename, $filedir, '', 'valignmiddle paddingleft2imp');
|
||||||
|
print '</td>';
|
||||||
if (!$i) {
|
if (!$i) {
|
||||||
$totalarray['nbfield']++;
|
$totalarray['nbfield']++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2011-2015 Regis Houssin <regis.houssin@inodbox.com>
|
/* Copyright (C) 2011-2015 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
|
* Copyright (C) 2021 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -47,6 +48,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09'); // set or del
|
$action = GETPOST('action', 'aZ09'); // set or del
|
||||||
$name = GETPOST('name', 'alpha');
|
$name = GETPOST('name', 'alpha');
|
||||||
|
$entity = GETPOST('entity', 'int');
|
||||||
|
$value = ((GETPOST('value', 'int') || GETPOST('value', 'int') == '0') ? GETPOST('value', 'int') : 1);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -64,9 +67,6 @@ top_httphead();
|
|||||||
|
|
||||||
// Registering the new value of constant
|
// Registering the new value of constant
|
||||||
if (!empty($action) && !empty($name)) {
|
if (!empty($action) && !empty($name)) {
|
||||||
$entity = GETPOST('entity', 'int');
|
|
||||||
$value = (GETPOST('value') ?GETPOST('value') : 1);
|
|
||||||
|
|
||||||
if ($user->admin) {
|
if ($user->admin) {
|
||||||
if ($action == 'set') {
|
if ($action == 'set') {
|
||||||
dolibarr_set_const($db, $name, $value, 'chaine', 0, '', $entity);
|
dolibarr_set_const($db, $name, $value, 'chaine', 0, '', $entity);
|
||||||
|
|||||||
@@ -531,7 +531,7 @@ abstract class CommonDocGenerator
|
|||||||
$totalUp += $line->subprice * $line->qty;
|
$totalUp += $line->subprice * $line->qty;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @GS: Calculate total up and total discount percentage
|
// Calculate total up and total discount percentage
|
||||||
// Note that this added fields does not match a field into database in Dolibarr (Dolibarr manage discount on lines not as a global property of object)
|
// Note that this added fields does not match a field into database in Dolibarr (Dolibarr manage discount on lines not as a global property of object)
|
||||||
$resarray['object_total_up'] = $totalUp;
|
$resarray['object_total_up'] = $totalUp;
|
||||||
$resarray['object_total_up_locale'] = price($resarray['object_total_up'], 0, $outputlangs);
|
$resarray['object_total_up_locale'] = price($resarray['object_total_up'], 0, $outputlangs);
|
||||||
|
|||||||
@@ -123,6 +123,12 @@ abstract class CommonObject
|
|||||||
*/
|
*/
|
||||||
protected $table_ref_field = '';
|
protected $table_ref_field = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
|
||||||
|
* @var integer
|
||||||
|
*/
|
||||||
|
public $restrictiononfksoc = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Following vars are used by some objects only. We keep this property here in CommonObject to be able to provide common method using them.
|
// Following vars are used by some objects only. We keep this property here in CommonObject to be able to provide common method using them.
|
||||||
@@ -4111,7 +4117,7 @@ abstract class CommonObject
|
|||||||
$sql .= " SET ".$fieldstatus." = ".((int) $status);
|
$sql .= " SET ".$fieldstatus." = ".((int) $status);
|
||||||
// If status = 1 = validated, update also fk_user_valid
|
// If status = 1 = validated, update also fk_user_valid
|
||||||
if ($status == 1 && $elementTable == 'expensereport') {
|
if ($status == 1 && $elementTable == 'expensereport') {
|
||||||
$sql .= ", fk_user_valid = ".$user->id;
|
$sql .= ", fk_user_valid = ".((int) $user->id);
|
||||||
}
|
}
|
||||||
$sql .= " WHERE rowid=".((int) $elementId);
|
$sql .= " WHERE rowid=".((int) $elementId);
|
||||||
|
|
||||||
@@ -4805,13 +4811,18 @@ abstract class CommonObject
|
|||||||
|
|
||||||
if (!empty($this->lines)) {
|
if (!empty($this->lines)) {
|
||||||
foreach ($this->lines as $line) {
|
foreach ($this->lines as $line) {
|
||||||
if (is_object($hookmanager) && (($line->product_type == 9 && !empty($line->special_code)) || !empty($line->fk_parent_line))) {
|
$reshook = 0;
|
||||||
|
//if (is_object($hookmanager) && (($line->product_type == 9 && !empty($line->special_code)) || !empty($line->fk_parent_line))) {
|
||||||
|
if (is_object($hookmanager)) { // Old code is commented on preceding line.
|
||||||
if (empty($line->fk_parent_line)) {
|
if (empty($line->fk_parent_line)) {
|
||||||
$parameters = array('line'=>$line, 'i'=>$i);
|
$parameters = array('line'=>$line, 'i'=>$i, 'restrictlist'=>$restrictlist, 'selectedLines'=> $selectedLines);
|
||||||
$action = '';
|
$reshook = $hookmanager->executeHooks('printOriginObjectLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
$hookmanager->executeHooks('printOriginObjectLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
|
} else {
|
||||||
|
$parameters = array('line'=>$line, 'i'=>$i, 'restrictlist'=>$restrictlist, 'selectedLines'=> $selectedLines, 'fk_parent_line'=>$line->fk_parent_line);
|
||||||
|
$reshook = $hookmanager->executeHooks('printOriginObjectSubLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
if (empty($reshook)) {
|
||||||
$this->printOriginLine($line, '', $restrictlist, '/core/tpl', $selectedLines);
|
$this->printOriginLine($line, '', $restrictlist, '/core/tpl', $selectedLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -958,7 +958,7 @@ class Form
|
|||||||
if ($row['code_iso']) {
|
if ($row['code_iso']) {
|
||||||
$labeltoshow .= ' <span class="opacitymedium">('.$row['code_iso'].')</span>';
|
$labeltoshow .= ' <span class="opacitymedium">('.$row['code_iso'].')</span>';
|
||||||
if (empty($hideflags)) {
|
if (empty($hideflags)) {
|
||||||
$tmpflag = picto_from_langcode($row['code_iso'], 'class="saturatemedium paddingrightonly"');
|
$tmpflag = picto_from_langcode($row['code_iso'], 'class="saturatemedium paddingrightonly"', 1);
|
||||||
$labeltoshow = $tmpflag.' '.$labeltoshow;
|
$labeltoshow = $tmpflag.' '.$labeltoshow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -969,7 +969,7 @@ class Form
|
|||||||
$out .= '<option value="'.($usecodeaskey ? ($usecodeaskey == 'code2' ? $row['code_iso'] : $row['code_iso3']) : $row['rowid']).'" data-html="'.dol_escape_htmltag($labeltoshow).'" data-eec="'.((int) $row['eec']).'">';
|
$out .= '<option value="'.($usecodeaskey ? ($usecodeaskey == 'code2' ? $row['code_iso'] : $row['code_iso3']) : $row['rowid']).'" data-html="'.dol_escape_htmltag($labeltoshow).'" data-eec="'.((int) $row['eec']).'">';
|
||||||
}
|
}
|
||||||
$out .= $labeltoshow;
|
$out .= $labeltoshow;
|
||||||
$out .= '</option>';
|
$out .= '</option>'."\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$out .= '</select>';
|
$out .= '</select>';
|
||||||
@@ -4724,7 +4724,7 @@ class Form
|
|||||||
$more .= '<div class="tagtable paddingtopbottomonly centpercent noborderspacing">'."\n";
|
$more .= '<div class="tagtable paddingtopbottomonly centpercent noborderspacing">'."\n";
|
||||||
foreach ($formquestion as $key => $input) {
|
foreach ($formquestion as $key => $input) {
|
||||||
if (is_array($input) && !empty($input)) {
|
if (is_array($input) && !empty($input)) {
|
||||||
$size = (!empty($input['size']) ? ' size="'.$input['size'].'"' : '');
|
$size = (!empty($input['size']) ? ' size="'.$input['size'].'"' : ''); // deprecated. Use morecss instead.
|
||||||
$moreattr = (!empty($input['moreattr']) ? ' '.$input['moreattr'] : '');
|
$moreattr = (!empty($input['moreattr']) ? ' '.$input['moreattr'] : '');
|
||||||
$morecss = (!empty($input['morecss']) ? ' '.$input['morecss'] : '');
|
$morecss = (!empty($input['morecss']) ? ' '.$input['morecss'] : '');
|
||||||
|
|
||||||
|
|||||||
@@ -981,13 +981,15 @@ class FormFile
|
|||||||
* You may want to call this into a div like this:
|
* You may want to call this into a div like this:
|
||||||
* print '<div class="inline-block valignmiddle">'.$formfile->getDocumentsLink($element_doc, $filename, $filedir).'</div>';
|
* print '<div class="inline-block valignmiddle">'.$formfile->getDocumentsLink($element_doc, $filename, $filedir).'</div>';
|
||||||
*
|
*
|
||||||
* @param string $modulepart propal, facture, facture_fourn, ...
|
* @param string $modulepart 'propal', 'facture', 'facture_fourn', ...
|
||||||
* @param string $modulesubdir Sub-directory to scan (Example: '0/1/10', 'FA/DD/MM/YY/9999'). Use '' if file is not into subdir of module.
|
* @param string $modulesubdir Sub-directory to scan (Example: '0/1/10', 'FA/DD/MM/YY/9999'). Use '' if file is not into subdir of module.
|
||||||
* @param string $filedir Full path to directory to scan
|
* @param string $filedir Full path to directory to scan
|
||||||
* @param string $filter Filter filenames on this regex string (Example: '\.pdf$')
|
* @param string $filter Filter filenames on this regex string (Example: '\.pdf$')
|
||||||
|
* @param string $morecss Add more css to the download picto
|
||||||
|
* @param string $allfiles 0=Only generated docs, 1=All files
|
||||||
* @return string Output string with HTML link of documents (might be empty string). This also fill the array ->infofiles
|
* @return string Output string with HTML link of documents (might be empty string). This also fill the array ->infofiles
|
||||||
*/
|
*/
|
||||||
public function getDocumentsLink($modulepart, $modulesubdir, $filedir, $filter = '')
|
public function getDocumentsLink($modulepart, $modulesubdir, $filedir, $filter = '', $morecss = 'valignmiddle', $allfiles = 0)
|
||||||
{
|
{
|
||||||
global $conf, $langs;
|
global $conf, $langs;
|
||||||
|
|
||||||
@@ -1005,12 +1007,11 @@ class FormFile
|
|||||||
$entity = ((!empty($regs[1]) && $regs[1] > 1) ? $regs[1] : 1); // If entity id not found in $filedir this is entity 1 by default
|
$entity = ((!empty($regs[1]) && $regs[1] > 1) ? $regs[1] : 1); // If entity id not found in $filedir this is entity 1 by default
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get list of files starting with name of ref (but not followed by "-" to discard uploaded files and get only generated files)
|
// Get list of files starting with name of ref (Note: files with '^ref\.extension' are generated files, files with '^ref-...' are uploaded files)
|
||||||
// @todo Why not showing by default all files by just removing the '[^\-]+' at end of regex ?
|
if ($allfiles || !empty($conf->global->MAIN_SHOW_ALL_FILES_ON_DOCUMENT_TOOLTIP)) {
|
||||||
if (!empty($conf->global->MAIN_SHOW_ALL_FILES_ON_DOCUMENT_TOOLTIP)) {
|
$filterforfilesearch = '^'.preg_quote(basename($modulesubdir), '/');
|
||||||
$filterforfilesearch = preg_quote(basename($modulesubdir), '/');
|
|
||||||
} else {
|
} else {
|
||||||
$filterforfilesearch = preg_quote(basename($modulesubdir), '/').'[^\-]+';
|
$filterforfilesearch = '^'.preg_quote(basename($modulesubdir), '/').'\.';
|
||||||
}
|
}
|
||||||
$file_list = dol_dir_list($filedir, 'files', 0, $filterforfilesearch, '\.meta$|\.png$'); // We also discard .meta and .png preview
|
$file_list = dol_dir_list($filedir, 'files', 0, $filterforfilesearch, '\.meta$|\.png$'); // We also discard .meta and .png preview
|
||||||
|
|
||||||
@@ -1019,7 +1020,7 @@ class FormFile
|
|||||||
$out .= '<!-- html.formfile::getDocumentsLink -->'."\n";
|
$out .= '<!-- html.formfile::getDocumentsLink -->'."\n";
|
||||||
if (!empty($file_list)) {
|
if (!empty($file_list)) {
|
||||||
$out = '<dl class="dropdown inline-block">
|
$out = '<dl class="dropdown inline-block">
|
||||||
<dt><a data-ajax="false" href="#" onClick="return false;">'.img_picto('', 'listlight', '', 0, 0, 0, '', 'valignmiddle').'</a></dt>
|
<dt><a data-ajax="false" href="#" onClick="return false;">'.img_picto('', 'listlight', '', 0, 0, 0, '', $morecss).'</a></dt>
|
||||||
<dd><div class="multichoicedoc" style="position:absolute;left:100px;" ><ul class="ulselectedfields">';
|
<dd><div class="multichoicedoc" style="position:absolute;left:100px;" ><ul class="ulselectedfields">';
|
||||||
$tmpout = '';
|
$tmpout = '';
|
||||||
|
|
||||||
|
|||||||
@@ -102,8 +102,7 @@ print "});\n";
|
|||||||
// Wrapper to manage dropdown
|
// Wrapper to manage dropdown
|
||||||
if (!defined('JS_JQUERY_DISABLE_DROPDOWN')) {
|
if (!defined('JS_JQUERY_DISABLE_DROPDOWN')) {
|
||||||
print "\n/* JS CODE TO ENABLE dropdown (hamburger, linkto, ...) */\n";
|
print "\n/* JS CODE TO ENABLE dropdown (hamburger, linkto, ...) */\n";
|
||||||
print '
|
print ' jQuery(document).ready(function () {
|
||||||
jQuery(document).ready(function () {
|
|
||||||
var lastopendropdown = null;
|
var lastopendropdown = null;
|
||||||
|
|
||||||
// Click onto the link "link to" or "hamburger", toggle dropdown
|
// Click onto the link "link to" or "hamburger", toggle dropdown
|
||||||
@@ -171,21 +170,19 @@ if (!defined('JS_JQUERY_DISABLE_DROPDOWN')) {
|
|||||||
// Wrapper to manage document_preview
|
// Wrapper to manage document_preview
|
||||||
if ($conf->browser->layout != 'phone') {
|
if ($conf->browser->layout != 'phone') {
|
||||||
print "\n/* JS CODE TO ENABLE document_preview */\n"; // Function document_preview is into header
|
print "\n/* JS CODE TO ENABLE document_preview */\n"; // Function document_preview is into header
|
||||||
print '
|
print ' jQuery(document).ready(function () {
|
||||||
jQuery(document).ready(function () {
|
|
||||||
jQuery(".documentpreview").click(function () {
|
jQuery(".documentpreview").click(function () {
|
||||||
console.log("We click on preview for element with href="+$(this).attr(\'href\')+" mime="+$(this).attr(\'mime\'));
|
console.log("We click on preview for element with href="+$(this).attr(\'href\')+" mime="+$(this).attr(\'mime\'));
|
||||||
document_preview($(this).attr(\'href\'), $(this).attr(\'mime\'), \''.dol_escape_js($langs->transnoentities("Preview")).'\');
|
document_preview($(this).attr(\'href\'), $(this).attr(\'mime\'), \''.dol_escape_js($langs->transnoentities("Preview")).'\');
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
});
|
});'."\n";
|
||||||
' . "\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Code to manage reposition
|
// Code to manage reposition
|
||||||
print "\n/* JS CODE TO ENABLE reposition management (does not work if a redirect is done after action of submission) */\n";
|
print "\n/* JS CODE TO ENABLE reposition management (does not work if a redirect is done after action of submission) */\n";
|
||||||
print '
|
print '
|
||||||
jQuery(document).ready(function() {
|
jQuery(document).ready(function() {
|
||||||
/* If page_y set, we set scollbar with it */
|
/* If page_y set, we set scollbar with it */
|
||||||
page_y=getParameterByName(\'page_y\', 0); /* search in GET parameter */
|
page_y=getParameterByName(\'page_y\', 0); /* search in GET parameter */
|
||||||
if (page_y == 0) page_y = jQuery("#page_y").text(); /* search in POST parameter that is filed at bottom of page */
|
if (page_y == 0) page_y = jQuery("#page_y").text(); /* search in POST parameter that is filed at bottom of page */
|
||||||
@@ -216,96 +213,123 @@ print '
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});'."\n";
|
});'."\n";
|
||||||
|
|
||||||
print "\n/* JS CODE TO ENABLE ClipBoard copy paste*/\n";
|
// Code to manage Copy To Clipboard click
|
||||||
print 'jQuery(\'.clipboardCPShowOnHover\').hover(
|
print "\n/* JS CODE TO ENABLE ClipBoard copy paste */\n";
|
||||||
function() {
|
print '
|
||||||
console.log("We hover a value with a copy paste feature");
|
jQuery(document).ready(function() {
|
||||||
$(this).children(".clipboardCPButton, .clipboardCPText").show();
|
jQuery(\'.clipboardCPShowOnHover\').hover(
|
||||||
},
|
function() {
|
||||||
function() {
|
console.log("We hover a value with a copy paste feature");
|
||||||
console.log("We hover out the value with a copy paste feature");
|
$(this).children(".clipboardCPButton, .clipboardCPText").show();
|
||||||
$(this).children(".clipboardCPButton, .clipboardCPText").hide();
|
},
|
||||||
}
|
function() {
|
||||||
);';
|
console.log("We hover out the value with a copy paste feature");
|
||||||
print 'jQuery(\'.clipboardCPButton, .clipboardCPValueToPrint\').click(function() {
|
$(this).children(".clipboardCPButton, .clipboardCPText").hide();
|
||||||
/* console.log(this.parentNode); */
|
}
|
||||||
console.log("We click on a clipboardCPButton or clipboardCPValueToPrint class");
|
);
|
||||||
if (window.getSelection) {
|
|
||||||
selection = window.getSelection();
|
|
||||||
|
|
||||||
range = document.createRange();
|
jQuery(\'.clipboardCPButton, .clipboardCPValueToPrint\').click(function() {
|
||||||
range.selectNodeContents(this.parentNode.firstChild);
|
/* console.log(this.parentNode); */
|
||||||
|
console.log("We click on a clipboardCPButton or clipboardCPValueToPrint class");
|
||||||
|
if (window.getSelection) {
|
||||||
|
selection = window.getSelection();
|
||||||
|
|
||||||
selection.removeAllRanges();
|
range = document.createRange();
|
||||||
selection.addRange( range );
|
range.selectNodeContents(this.parentNode.firstChild);
|
||||||
}
|
|
||||||
document.execCommand( \'copy\' );
|
|
||||||
window.getSelection().removeAllRanges();
|
|
||||||
|
|
||||||
/* Show message */
|
selection.removeAllRanges();
|
||||||
var lastchild = this.parentNode.lastChild;
|
selection.addRange( range );
|
||||||
var tmp = lastchild.innerHTML
|
}
|
||||||
lastchild.innerHTML = \''.dol_escape_js($langs->trans('CopiedToClipboard')).'\';
|
document.execCommand( \'copy\' );
|
||||||
setTimeout(() => { lastchild.innerHTML = tmp; }, 1000);
|
window.getSelection().removeAllRanges();
|
||||||
})'."\n";
|
|
||||||
|
/* Show message */
|
||||||
|
var lastchild = this.parentNode.lastChild;
|
||||||
|
var tmp = lastchild.innerHTML
|
||||||
|
lastchild.innerHTML = \''.dol_escape_js($langs->trans('CopiedToClipboard')).'\';
|
||||||
|
setTimeout(() => { lastchild.innerHTML = tmp; }, 1000);
|
||||||
|
});
|
||||||
|
});'."\n";
|
||||||
|
|
||||||
|
// Code to manage clicktodial
|
||||||
|
print "\n/* JS CODE TO ENABLE clicktodial call of an URL */\n";
|
||||||
|
print '
|
||||||
|
jQuery(document).ready(function() {
|
||||||
|
jQuery(".cssforclicktodial").click(function() {
|
||||||
|
event.preventDefault();
|
||||||
|
console.log("We click on a cssforclicktodial class with url="+this.href);
|
||||||
|
$.ajax({
|
||||||
|
url: this.href,
|
||||||
|
type: \'GET\',
|
||||||
|
data: { token: \''.newToken().'\' }
|
||||||
|
}).done(function(xhr, textStatus, errorThrown) {
|
||||||
|
/* do nothing */
|
||||||
|
}).fail(function(xhr, textStatus, errorThrown) {
|
||||||
|
alert("Error: "+textStatus);
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});'."\n";
|
||||||
|
|
||||||
|
|
||||||
|
// Code to manage the confirm dialog box
|
||||||
print "\n/* JS CODE TO ENABLE DIALOG CONFIRM POPUP ON ACTION BUTTON */\n";
|
print "\n/* JS CODE TO ENABLE DIALOG CONFIRM POPUP ON ACTION BUTTON */\n";
|
||||||
print '$( document ).ready(function() {
|
print '
|
||||||
$(document).on("click", \'.butActionConfirm\', function(event) {
|
jQuery(document).ready(function() {
|
||||||
event.preventDefault();
|
$(document).on("click", \'.butActionConfirm\', function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
// I don\'t use jquery $(this).data(\'confirm-url\'); to get $(this).attr(\'data-confirm-url\'); because .data() can doesn\'t work with ajax
|
// I don\'t use jquery $(this).data(\'confirm-url\'); to get $(this).attr(\'data-confirm-url\'); because .data() can doesn\'t work with ajax
|
||||||
var confirmUrl = $(this).attr(\'data-confirm-url\');
|
var confirmUrl = $(this).attr(\'data-confirm-url\');
|
||||||
var confirmTitle = $(this).attr(\'data-confirm-title\');
|
var confirmTitle = $(this).attr(\'data-confirm-title\');
|
||||||
var confirmContent = $(this).attr(\'data-confirm-content\');
|
var confirmContent = $(this).attr(\'data-confirm-content\');
|
||||||
var confirmActionBtnLabel = $(this).attr(\'data-confirm-action-btn-label\');
|
var confirmActionBtnLabel = $(this).attr(\'data-confirm-action-btn-label\');
|
||||||
var confirmCancelBtnLabel = $(this).attr(\'data-confirm-cancel-btn-label\');
|
var confirmCancelBtnLabel = $(this).attr(\'data-confirm-cancel-btn-label\');
|
||||||
var confirmModal = $(this).attr(\'data-confirm-modal\');
|
var confirmModal = $(this).attr(\'data-confirm-modal\');
|
||||||
if(confirmModal == undefined){ confirmModal = false; }
|
if(confirmModal == undefined){ confirmModal = false; }
|
||||||
|
|
||||||
var confirmId = \'confirm-dialog-box\';
|
var confirmId = \'confirm-dialog-box\';
|
||||||
if($(this).attr(\'id\') != undefined){ var confirmId = confirmId + "-" + $(this).attr(\'id\'); }
|
if($(this).attr(\'id\') != undefined){ var confirmId = confirmId + "-" + $(this).attr(\'id\'); }
|
||||||
if($("#" + confirmId) != undefined) { $(\'#\' + confirmId).remove(); }
|
if($("#" + confirmId) != undefined) { $(\'#\' + confirmId).remove(); }
|
||||||
|
|
||||||
// Create modal box
|
// Create modal box
|
||||||
|
|
||||||
var $confirmBox = $(\'<div/>\', {
|
var $confirmBox = $(\'<div/>\', {
|
||||||
id: confirmId,
|
id: confirmId,
|
||||||
title: confirmTitle
|
title: confirmTitle
|
||||||
}).appendTo(\'body\');
|
}).appendTo(\'body\');
|
||||||
|
|
||||||
$confirmBox.dialog({
|
$confirmBox.dialog({
|
||||||
autoOpen: true,
|
autoOpen: true,
|
||||||
modal: confirmModal,
|
modal: confirmModal,
|
||||||
//width: Math.min($( window ).width() - 50, 1700),
|
//width: Math.min($( window ).width() - 50, 1700),
|
||||||
width: \'auto\',
|
width: \'auto\',
|
||||||
dialogClass: \'confirm-dialog-box\',
|
dialogClass: \'confirm-dialog-box\',
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: confirmActionBtnLabel,
|
text: confirmActionBtnLabel,
|
||||||
"class": \'ui-state-information\',
|
"class": \'ui-state-information\',
|
||||||
click: function () {
|
click: function () {
|
||||||
window.location.replace(confirmUrl);
|
window.location.replace(confirmUrl);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: confirmCancelBtnLabel,
|
||||||
|
"class": \'ui-state-information\',
|
||||||
|
click: function () {
|
||||||
|
$(this).dialog("close");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
close: function( event, ui ) {
|
||||||
|
$(\'#\'+confirmBox).remove();
|
||||||
},
|
},
|
||||||
{
|
open: function( event, ui ) {
|
||||||
text: confirmCancelBtnLabel,
|
$confirmBox.html(confirmContent);
|
||||||
"class": \'ui-state-information\',
|
|
||||||
click: function () {
|
|
||||||
$(this).dialog("close");
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
],
|
|
||||||
close: function( event, ui ) {
|
|
||||||
$(\'#\'+confirmBox).remove();
|
|
||||||
},
|
|
||||||
open: function( event, ui ) {
|
|
||||||
$confirmBox.html(confirmContent);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
'."\n";
|
'."\n";
|
||||||
|
|||||||
@@ -549,20 +549,27 @@ function hideMessage(fieldId,message) {
|
|||||||
* @param int strict Strict
|
* @param int strict Strict
|
||||||
* @param int forcereload Force reload
|
* @param int forcereload Force reload
|
||||||
* @param int userid User id
|
* @param int userid User id
|
||||||
|
* @param int value Value to set
|
||||||
* @param string token Token
|
* @param string token Token
|
||||||
*/
|
*/
|
||||||
function setConstant(url, code, input, entity, strict, forcereload, userid, token) {
|
function setConstant(url, code, input, entity, strict, forcereload, userid, token, value) {
|
||||||
var saved_url = url; /* avoid undefined url */
|
var saved_url = url; /* avoid undefined url */
|
||||||
$.post( url, {
|
$.post( url, {
|
||||||
action: "set",
|
action: "set",
|
||||||
name: code,
|
name: code,
|
||||||
entity: entity,
|
entity: entity,
|
||||||
token: token
|
token: token,
|
||||||
|
value: value
|
||||||
},
|
},
|
||||||
function() { /* handler for success of post */
|
function() { /* handler for success of post */
|
||||||
console.log("url request success forcereload="+forcereload);
|
console.log("url request success forcereload="+forcereload+" value="+value);
|
||||||
$("#set_" + code).hide();
|
if (value == 0) {
|
||||||
$("#del_" + code).show();
|
$("#set_" + code).show();
|
||||||
|
$("#del_" + code).hide();
|
||||||
|
} else {
|
||||||
|
$("#set_" + code).hide();
|
||||||
|
$("#del_" + code).show();
|
||||||
|
}
|
||||||
$.each(input, function(type, data) {
|
$.each(input, function(type, data) {
|
||||||
// Enable another element
|
// Enable another element
|
||||||
if (type == "disabled" && strict != 1) {
|
if (type == "disabled" && strict != 1) {
|
||||||
@@ -610,7 +617,7 @@ function setConstant(url, code, input, entity, strict, forcereload, userid, toke
|
|||||||
if (forcereload) {
|
if (forcereload) {
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
}).fail(function(error) { location.reload(); }); /* When it fails, we always force reload to have setEventErrorMEssage in session visible */
|
}).fail(function(error) { location.reload(); }); /* When it fails, we always force reload to have setEventErrorMessages in session visible */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -681,7 +688,7 @@ function delConstant(url, code, input, entity, strict, forcereload, userid, toke
|
|||||||
if (forcereload) {
|
if (forcereload) {
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
}).fail(function(error) { location.reload(); }); /* When it fails, we always force reload to have setEventErrorMEssage in session visible */
|
}).fail(function(error) { location.reload(); }); /* When it fails, we always force reload to have setEventErrorMessages in session visible */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -716,7 +723,7 @@ function confirmConstantAction(action, url, code, input, box, entity, yesButton,
|
|||||||
text : yesButton,
|
text : yesButton,
|
||||||
click : function() {
|
click : function() {
|
||||||
if (action == "set") {
|
if (action == "set") {
|
||||||
setConstant(url, code, input, entity, strict, 0, userid, token);
|
setConstant(url, code, input, entity, strict, 0, userid, token, 1);
|
||||||
} else if (action == "del") {
|
} else if (action == "del") {
|
||||||
delConstant(url, code, input, entity, strict, 0, userid, token);
|
delConstant(url, code, input, entity, strict, 0, userid, token);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ function versioncompare($versionarray1, $versionarray2)
|
|||||||
* Return version PHP
|
* Return version PHP
|
||||||
*
|
*
|
||||||
* @return array Tableau de version (vermajeur,vermineur,autre)
|
* @return array Tableau de version (vermajeur,vermineur,autre)
|
||||||
|
* @see versioncompare()
|
||||||
*/
|
*/
|
||||||
function versionphparray()
|
function versionphparray()
|
||||||
{
|
{
|
||||||
@@ -133,6 +134,7 @@ function versionphparray()
|
|||||||
* Return version Dolibarr
|
* Return version Dolibarr
|
||||||
*
|
*
|
||||||
* @return array Tableau de version (vermajeur,vermineur,autre)
|
* @return array Tableau de version (vermajeur,vermineur,autre)
|
||||||
|
* @see versioncompare()
|
||||||
*/
|
*/
|
||||||
function versiondolibarrarray()
|
function versiondolibarrarray()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -540,14 +540,15 @@ function ajax_combobox($htmlname, $events = array(), $minLengthToAutocomplete =
|
|||||||
* @param string $code Name of constant
|
* @param string $code Name of constant
|
||||||
* @param array $input Array of complementary actions to do if success ("disabled"|"enabled'|'set'|'del') => CSS element to switch, 'alert' => message to show, ... Example: array('disabled'=>array(0=>'cssid'))
|
* @param array $input Array of complementary actions to do if success ("disabled"|"enabled'|'set'|'del') => CSS element to switch, 'alert' => message to show, ... Example: array('disabled'=>array(0=>'cssid'))
|
||||||
* @param int $entity Entity. Current entity is used if null.
|
* @param int $entity Entity. Current entity is used if null.
|
||||||
* @param int $revertonoff Revert on/off
|
* @param int $revertonoff 1=Revert on/off
|
||||||
* @param int $strict Use only "disabled" with delConstant and "enabled" with setConstant
|
* @param int $strict Use only "disabled" with delConstant and "enabled" with setConstant
|
||||||
* @param int $forcereload Force to reload page if we click/change value (this is supported only when there is no 'alert' option in input)
|
* @param int $forcereload Force to reload page if we click/change value (this is supported only when there is no 'alert' option in input)
|
||||||
* @param string $marginleftonlyshort 1 = Add a short left margin on picto, 2 = Add a larger left margin on picto, 0 = No left margin. Works for fontawesome picto only.
|
* @param string $marginleftonlyshort 1 = Add a short left margin on picto, 2 = Add a larger left margin on picto, 0 = No left margin. Works for fontawesome picto only.
|
||||||
* @param int $forcenoajax 1 = Force to use a ahref link instead of ajax code.
|
* @param int $forcenoajax 1 = Force to use a ahref link instead of ajax code.
|
||||||
|
* @param int $setzeroinsteadofdel 1 = Set constantto '0' instead of deleting it
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function ajax_constantonoff($code, $input = array(), $entity = null, $revertonoff = 0, $strict = 0, $forcereload = 0, $marginleftonlyshort = 2, $forcenoajax = 0)
|
function ajax_constantonoff($code, $input = array(), $entity = null, $revertonoff = 0, $strict = 0, $forcereload = 0, $marginleftonlyshort = 2, $forcenoajax = 0, $setzeroinsteadofdel = 0)
|
||||||
{
|
{
|
||||||
global $conf, $langs, $user;
|
global $conf, $langs, $user;
|
||||||
|
|
||||||
@@ -593,9 +594,13 @@ function ajax_constantonoff($code, $input = array(), $entity = null, $revertonof
|
|||||||
if (input.alert.del.yesButton) yesButton = input.alert.del.yesButton;
|
if (input.alert.del.yesButton) yesButton = input.alert.del.yesButton;
|
||||||
if (input.alert.del.noButton) noButton = input.alert.del.noButton;
|
if (input.alert.del.noButton) noButton = input.alert.del.noButton;
|
||||||
confirmConstantAction("del", url, code, input, input.alert.del, entity, yesButton, noButton, strict, userid, token);
|
confirmConstantAction("del", url, code, input, input.alert.del, entity, yesButton, noButton, strict, userid, token);
|
||||||
} else {
|
} else {';
|
||||||
delConstant(url, code, input, entity, 0, '.$forcereload.', userid, token);
|
if (empty($setzeroinsteadofdel)) {
|
||||||
}
|
$out .=' delConstant(url, code, input, entity, 0, '.$forcereload.', userid, token);';
|
||||||
|
} else {
|
||||||
|
$out .=' setConstant(url, code, input, entity, 0, '.$forcereload.', userid, token, 0);';
|
||||||
|
}
|
||||||
|
$out .= ' }
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>'."\n";
|
</script>'."\n";
|
||||||
|
|||||||
@@ -668,15 +668,16 @@ function getGMTEasterDatetime($year)
|
|||||||
*
|
*
|
||||||
* @param int $timestampStart Timestamp start (UTC with hour, min, sec = 0)
|
* @param int $timestampStart Timestamp start (UTC with hour, min, sec = 0)
|
||||||
* @param int $timestampEnd Timestamp end (UTC with hour, min, sec = 0)
|
* @param int $timestampEnd Timestamp end (UTC with hour, min, sec = 0)
|
||||||
* @param string $country_code Country code
|
* @param string $country_code Country code
|
||||||
* @param int $lastday Last day is included, 0: no, 1:yes
|
* @param int $lastday Last day is included, 0: no, 1:yes
|
||||||
* @param int $includesaturday Include saturday as non working day (-1=use setup, 0=no, 1=yes)
|
* @param int $includesaturday Include saturday as non working day (-1=use setup, 0=no, 1=yes)
|
||||||
* @param int $includesunday Include sunday as non working day (-1=use setup, 0=no, 1=yes)
|
* @param int $includesunday Include sunday as non working day (-1=use setup, 0=no, 1=yes)
|
||||||
* @param int $includefriday Include friday as non working day (-1=use setup, 0=no, 1=yes)
|
* @param int $includefriday Include friday as non working day (-1=use setup, 0=no, 1=yes)
|
||||||
* @return int|string Number of non working days or error message string if error
|
* @param int $includemonday Include monday as non working day (-1=use setup, 0=no, 1=yes)
|
||||||
|
* @return int|string Number of non working days or error message string if error
|
||||||
* @see num_between_day(), num_open_day()
|
* @see num_between_day(), num_open_day()
|
||||||
*/
|
*/
|
||||||
function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includesaturday = -1, $includesunday = -1, $includefriday = -1)
|
function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includesaturday = -1, $includesunday = -1, $includefriday = -1, $includemonday = -1)
|
||||||
{
|
{
|
||||||
global $db, $conf, $mysoc;
|
global $db, $conf, $mysoc;
|
||||||
|
|
||||||
@@ -690,6 +691,9 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '',
|
|||||||
if (empty($country_code)) {
|
if (empty($country_code)) {
|
||||||
$country_code = $mysoc->country_code;
|
$country_code = $mysoc->country_code;
|
||||||
}
|
}
|
||||||
|
if ($includemonday < 0) {
|
||||||
|
$includemonday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_MONDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_MONDAY : 0);
|
||||||
|
}
|
||||||
if ($includefriday < 0) {
|
if ($includefriday < 0) {
|
||||||
$includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 0);
|
$includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2242,7 +2242,7 @@ function dol_most_recent_file($dir, $regexfilter = '', $excludefilter = array('(
|
|||||||
* Security check when accessing to a document (used by document.php, viewimage.php and webservices to get documents).
|
* Security check when accessing to a document (used by document.php, viewimage.php and webservices to get documents).
|
||||||
* TODO Replace code that set $accesallowed by a call to restrictedArea()
|
* TODO Replace code that set $accesallowed by a call to restrictedArea()
|
||||||
*
|
*
|
||||||
* @param string $modulepart Module of document ('module', 'module_user_temp', 'module_user' or 'module_temp')
|
* @param string $modulepart Module of document ('module', 'module_user_temp', 'module_user' or 'module_temp'). Exemple: 'medias', 'invoice', 'logs', 'tax-vat', ...
|
||||||
* @param string $original_file Relative path with filename, relative to modulepart.
|
* @param string $original_file Relative path with filename, relative to modulepart.
|
||||||
* @param string $entity Restrict onto entity (0=no restriction)
|
* @param string $entity Restrict onto entity (0=no restriction)
|
||||||
* @param User $fuser User object (forced)
|
* @param User $fuser User object (forced)
|
||||||
@@ -2270,10 +2270,13 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity,
|
|||||||
$entity = 0;
|
$entity = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Fix modulepart
|
// Fix modulepart for backward compatibility
|
||||||
if ($modulepart == 'users') {
|
if ($modulepart == 'users') {
|
||||||
$modulepart = 'user';
|
$modulepart = 'user';
|
||||||
}
|
}
|
||||||
|
if ($modulepart == 'tva') {
|
||||||
|
$modulepart = 'tax-vat';
|
||||||
|
}
|
||||||
|
|
||||||
//print 'dol_check_secure_access_document modulepart='.$modulepart.' original_file='.$original_file.' entity='.$entity;
|
//print 'dol_check_secure_access_document modulepart='.$modulepart.' original_file='.$original_file.' entity='.$entity;
|
||||||
dol_syslog('dol_check_secure_access_document modulepart='.$modulepart.' original_file='.$original_file.' entity='.$entity);
|
dol_syslog('dol_check_secure_access_document modulepart='.$modulepart.' original_file='.$original_file.' entity='.$entity);
|
||||||
@@ -2443,7 +2446,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity,
|
|||||||
$accessallowed = 1;
|
$accessallowed = 1;
|
||||||
}
|
}
|
||||||
$original_file = (!empty($conf->product->multidir_temp[$entity]) ? $conf->product->multidir_temp[$entity] : $conf->service->multidir_temp[$entity]).'/'.$original_file;
|
$original_file = (!empty($conf->product->multidir_temp[$entity]) ? $conf->product->multidir_temp[$entity] : $conf->service->multidir_temp[$entity]).'/'.$original_file;
|
||||||
} elseif (in_array($modulepart, array('tax', 'tax-vat')) && !empty($conf->tax->dir_output)) {
|
} elseif (in_array($modulepart, array('tax', 'tax-vat', 'tva')) && !empty($conf->tax->dir_output)) {
|
||||||
// Wrapping for taxes
|
// Wrapping for taxes
|
||||||
if ($fuser->rights->tax->charges->{$lire}) {
|
if ($fuser->rights->tax->charges->{$lire}) {
|
||||||
$accessallowed = 1;
|
$accessallowed = 1;
|
||||||
|
|||||||
@@ -3054,11 +3054,18 @@ function dol_print_phone($phone, $countrycode = '', $cid = 0, $socid = 0, $addli
|
|||||||
'__PASS__'=>$clicktodial_password);
|
'__PASS__'=>$clicktodial_password);
|
||||||
$url = make_substitutions($url, $substitarray);
|
$url = make_substitutions($url, $substitarray);
|
||||||
$newphonesav = $newphone;
|
$newphonesav = $newphone;
|
||||||
$newphone = '<a href="'.$url.'"';
|
if (empty($conf->global->CLICKTODIAL_DO_NOT_USE_AJAX_CALL)) {
|
||||||
if (!empty($conf->global->CLICKTODIAL_FORCENEWTARGET)) {
|
// Default and recommended: New method using ajax without submiting a page making a javascript history.go(-1) back
|
||||||
$newphone .= ' target="_blank"';
|
$newphone = '<a href="'.$url.'" class="cssforclicktodial"'; // Call of ajax is handled by the lib_foot.js.php on class 'cssforclicktodial'
|
||||||
|
$newphone .= '>'.$newphonesav.'</a>';
|
||||||
|
} else {
|
||||||
|
// Old method
|
||||||
|
$newphone = '<a href="'.$url.'"';
|
||||||
|
if (!empty($conf->global->CLICKTODIAL_FORCENEWTARGET)) {
|
||||||
|
$newphone .= ' target="_blank"';
|
||||||
|
}
|
||||||
|
$newphone .= '>'.$newphonesav.'</a>';
|
||||||
}
|
}
|
||||||
$newphone .= '>'.$newphonesav.'</a>';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (($cid || $socid) && ! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create)
|
//if (($cid || $socid) && ! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create)
|
||||||
@@ -3783,7 +3790,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
|
|||||||
return $fullpathpicto;
|
return $fullpathpicto;
|
||||||
}
|
}
|
||||||
// tag title is used for tooltip on <a>, tag alt can be used with very simple text on image for blind people
|
// tag title is used for tooltip on <a>, tag alt can be used with very simple text on image for blind people
|
||||||
return '<img src="'.$fullpathpicto.'" alt="'.dol_escape_htmltag($alt).'"'.(($notitle || empty($titlealt)) ? '' : ' title="'.dol_escape_htmltag($titlealt).'"').($moreatt ? ' '.$moreatt.($morecss ? ' class="'.$morecss.'"' : '') : ' class="inline-block'.($morecss ? ' '.$morecss : '').'"').'>'; // Alt is used for accessibility, title for popup
|
return '<img src="'.$fullpathpicto.'"'.($notitle ? '' : ' alt="'.dol_escape_htmltag($alt).'"').(($notitle || empty($titlealt)) ? '' : ' title="'.dol_escape_htmltag($titlealt).'"').($moreatt ? ' '.$moreatt.($morecss ? ' class="'.$morecss.'"' : '') : ' class="inline-block'.($morecss ? ' '.$morecss : '').'"').'>'; // Alt is used for accessibility, title for popup
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3843,10 +3850,11 @@ function img_weather($titlealt, $picto, $moreatt = '', $pictoisfullpath = 0, $mo
|
|||||||
* @param string $picto Name of image file to show (If no extension provided, we use '.png'). Image must be stored into htdocs/theme/common directory.
|
* @param string $picto Name of image file to show (If no extension provided, we use '.png'). Image must be stored into htdocs/theme/common directory.
|
||||||
* @param string $moreatt Add more attribute on img tag
|
* @param string $moreatt Add more attribute on img tag
|
||||||
* @param int $pictoisfullpath If 1, image path is a full path
|
* @param int $pictoisfullpath If 1, image path is a full path
|
||||||
|
* @param int $notitle 1=Disable tag title. Use it if you add js tooltip, to avoid duplicate tooltip.
|
||||||
* @return string Return img tag
|
* @return string Return img tag
|
||||||
* @see img_object(), img_picto()
|
* @see img_object(), img_picto()
|
||||||
*/
|
*/
|
||||||
function img_picto_common($titlealt, $picto, $moreatt = '', $pictoisfullpath = 0)
|
function img_picto_common($titlealt, $picto, $moreatt = '', $pictoisfullpath = 0, $notitle = 0)
|
||||||
{
|
{
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
@@ -3868,7 +3876,7 @@ function img_picto_common($titlealt, $picto, $moreatt = '', $pictoisfullpath = 0
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return img_picto($titlealt, $path, $moreatt, 1);
|
return img_picto($titlealt, $path, $moreatt, 1, 0, $notitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -8119,9 +8127,10 @@ function dol_validElement($element)
|
|||||||
*
|
*
|
||||||
* @param string $codelang Language code ('en_IN', 'fr_CA', ...) or ISO Country code on 2 characters in uppercase ('IN', 'FR')
|
* @param string $codelang Language code ('en_IN', 'fr_CA', ...) or ISO Country code on 2 characters in uppercase ('IN', 'FR')
|
||||||
* @param string $moreatt Add more attribute on img tag (For example 'style="float: right"' or 'class="saturatemedium"')
|
* @param string $moreatt Add more attribute on img tag (For example 'style="float: right"' or 'class="saturatemedium"')
|
||||||
|
* @param int $notitlealt No title alt
|
||||||
* @return string HTML img string with flag.
|
* @return string HTML img string with flag.
|
||||||
*/
|
*/
|
||||||
function picto_from_langcode($codelang, $moreatt = '')
|
function picto_from_langcode($codelang, $moreatt = '', $notitlealt = 0)
|
||||||
{
|
{
|
||||||
if (empty($codelang)) {
|
if (empty($codelang)) {
|
||||||
return '';
|
return '';
|
||||||
@@ -8154,7 +8163,7 @@ function picto_from_langcode($codelang, $moreatt = '')
|
|||||||
$flagImage = empty($tmparray[1]) ? $tmparray[0] : $tmparray[1];
|
$flagImage = empty($tmparray[1]) ? $tmparray[0] : $tmparray[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
return img_picto_common($codelang, 'flags/'.strtolower($flagImage).'.png', $moreatt);
|
return img_picto_common($codelang, 'flags/'.strtolower($flagImage).'.png', $moreatt, 0, $notitlealt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1876,7 +1876,7 @@ function version_os($option = '')
|
|||||||
* Return PHP version
|
* Return PHP version
|
||||||
*
|
*
|
||||||
* @return string PHP version
|
* @return string PHP version
|
||||||
* @see versionphparray()
|
* @see versionphparray(), versioncompare()
|
||||||
*/
|
*/
|
||||||
function version_php()
|
function version_php()
|
||||||
{
|
{
|
||||||
@@ -1887,7 +1887,7 @@ function version_php()
|
|||||||
* Return Dolibarr version
|
* Return Dolibarr version
|
||||||
*
|
*
|
||||||
* @return string Dolibarr version
|
* @return string Dolibarr version
|
||||||
* @see versiondolibarrarray()
|
* @see versiondolibarrarray(), versioncompare()
|
||||||
*/
|
*/
|
||||||
function version_dolibarr()
|
function version_dolibarr()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout =
|
|||||||
// Accounting
|
// Accounting
|
||||||
$tmpentry = array(
|
$tmpentry = array(
|
||||||
'enabled'=>(!empty($conf->comptabilite->enabled) || !empty($conf->accounting->enabled) || !empty($conf->asset->enabled) || !empty($conf->intracommreport->enabled)),
|
'enabled'=>(!empty($conf->comptabilite->enabled) || !empty($conf->accounting->enabled) || !empty($conf->asset->enabled) || !empty($conf->intracommreport->enabled)),
|
||||||
'perms'=>(!empty($user->rights->compta->resultat->lire) || !empty($user->rights->accounting->mouvements->lire) || !empty($user->rights->asset->read) || !empty($user->rights->intracommreport->read)),
|
'perms'=>(!empty($user->rights->compta->resultat->lire) || !empty($user->rights->accounting->comptarapport->lire) || !empty($user->rights->accounting->mouvements->lire) || !empty($user->rights->asset->read) || !empty($user->rights->intracommreport->read)),
|
||||||
'module'=>'comptabilite|accounting|asset|intracommreport'
|
'module'=>'comptabilite|accounting|asset|intracommreport'
|
||||||
);
|
);
|
||||||
$menu_arr[] = array(
|
$menu_arr[] = array(
|
||||||
@@ -1206,7 +1206,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
|
|||||||
|
|
||||||
// Accounting (Double entries)
|
// Accounting (Double entries)
|
||||||
if (!empty($conf->accounting->enabled)) {
|
if (!empty($conf->accounting->enabled)) {
|
||||||
$permtoshowmenu = (!empty($conf->accounting->enabled) || $user->rights->accounting->bind->write || $user->rights->compta->resultat->lire);
|
//$permtoshowmenu = (!empty($conf->accounting->enabled) || $user->rights->accounting->bind->write || $user->rights->compta->resultat->lire);
|
||||||
//$newmenu->add("/accountancy/index.php?leftmenu=accountancy", $langs->trans("MenuAccountancy"), 0, $permtoshowmenu, '', $mainmenu, 'accountancy');
|
//$newmenu->add("/accountancy/index.php?leftmenu=accountancy", $langs->trans("MenuAccountancy"), 0, $permtoshowmenu, '', $mainmenu, 'accountancy');
|
||||||
|
|
||||||
// Configuration
|
// Configuration
|
||||||
@@ -1343,7 +1343,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Accounting
|
// Accounting
|
||||||
$newmenu->add("/accountancy/index.php?leftmenu=accountancy_accountancy", $langs->trans("MenuAccountancy"), 0, $user->rights->accounting->mouvements->lire, '', $mainmenu, 'accountancy', 1, '', '', '', img_picto('', 'accountancy', 'class="paddingright pictofixedwidth"'));
|
$newmenu->add("/accountancy/index.php?leftmenu=accountancy_accountancy", $langs->trans("MenuAccountancy"), 0, $user->rights->accounting->mouvements->lire || $user->rights->accounting->comptarapport->lire, '', $mainmenu, 'accountancy', 1, '', '', '', img_picto('', 'accountancy', 'class="paddingright pictofixedwidth"'));
|
||||||
|
|
||||||
// General Ledger
|
// General Ledger
|
||||||
$newmenu->add("/accountancy/bookkeeping/listbyaccount.php?mainmenu=accountancy&leftmenu=accountancy_accountancy", $langs->trans("Bookkeeping"), 1, $user->rights->accounting->mouvements->lire);
|
$newmenu->add("/accountancy/bookkeeping/listbyaccount.php?mainmenu=accountancy&leftmenu=accountancy_accountancy", $langs->trans("Bookkeeping"), 1, $user->rights->accounting->mouvements->lire);
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ class pdf_rouget extends ModelePdfExpedition
|
|||||||
|
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->name = "rouget";
|
$this->name = "rouget";
|
||||||
$this->description = $langs->trans("DocumentModelStandardPDF");
|
$this->description = $langs->trans("DocumentModelStandardPDF").' ('.$langs->trans("OldImplementation").')';
|
||||||
$this->update_main_doc_field = 1; // Save the name of generated file as the main doc when generating a doc with this template
|
$this->update_main_doc_field = 1; // Save the name of generated file as the main doc when generating a doc with this template
|
||||||
|
|
||||||
$this->type = 'pdf';
|
$this->type = 'pdf';
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ class modWorkflow extends DolibarrModules
|
|||||||
0=>array('WORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL', 0, 'current', 0),
|
0=>array('WORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL', 0, 'current', 0),
|
||||||
1=>array('WORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL', 'chaine', '1', 'WORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL', 0, 'current', 0),
|
1=>array('WORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL', 'chaine', '1', 'WORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL', 0, 'current', 0),
|
||||||
2=>array('WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING', 0, 'current', 0),
|
2=>array('WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING', 0, 'current', 0),
|
||||||
|
3=>array('WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED', 0, 'current', 0),
|
||||||
4=>array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER', 0, 'current', 0),
|
4=>array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER', 0, 'current', 0),
|
||||||
5=>array('WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL', 0, 'current', 0),
|
5=>array('WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL', 0, 'current', 0),
|
||||||
6=>array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 0, 'current', 0),
|
6=>array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 0, 'current', 0),
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ if (!empty($extrafieldsobjectkey) && !empty($search_array_options) && is_array($
|
|||||||
if (is_array($crit)) {
|
if (is_array($crit)) {
|
||||||
$crit = implode(' ', $crit); // natural_search() expects a string
|
$crit = implode(' ', $crit); // natural_search() expects a string
|
||||||
} elseif ($typ === 'select' and is_string($crit) and strpos($crit, ' ') === false) {
|
} elseif ($typ === 'select' and is_string($crit) and strpos($crit, ' ') === false) {
|
||||||
$sql .= ' AND ('.$extrafieldsobjectprefix.$tmpkey.' = "'.$db->escape($crit).'")';
|
$sql .= " AND (".$extrafieldsobjectprefix.$tmpkey." = '".$db->escape($crit)."')";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$sql .= natural_search($extrafieldsobjectprefix.$tmpkey, $crit, $mode_search);
|
$sql .= natural_search($extrafieldsobjectprefix.$tmpkey, $crit, $mode_search);
|
||||||
|
|||||||
@@ -256,15 +256,20 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'SHIPPING_VALIDATE') {
|
if (($action == 'SHIPPING_VALIDATE') || ($action == 'SHIPPING_CLOSED')) {
|
||||||
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
|
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
|
||||||
|
|
||||||
if (!empty($conf->commande->enabled) && !empty($conf->expedition->enabled) && !empty($conf->workflow->enabled) && !empty($conf->global->WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING)) {
|
if (!empty($conf->commande->enabled) && !empty($conf->expedition->enabled) && !empty($conf->workflow->enabled) &&
|
||||||
|
(
|
||||||
|
(!empty($conf->global->WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING) && ($action == 'SHIPPING_VALIDATE')) ||
|
||||||
|
(!empty($conf->global->WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED) && ($action == 'SHIPPING_CLOSED'))
|
||||||
|
)
|
||||||
|
) {
|
||||||
$qtyshipped = array();
|
$qtyshipped = array();
|
||||||
$qtyordred = array();
|
$qtyordred = array();
|
||||||
require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
|
||||||
|
|
||||||
//find all shippement on order origin
|
// Find all shipments on order origin
|
||||||
$order = new Commande($this->db);
|
$order = new Commande($this->db);
|
||||||
$ret = $order->fetch($object->origin_id);
|
$ret = $order->fetch($object->origin_id);
|
||||||
if ($ret < 0) {
|
if ($ret < 0) {
|
||||||
@@ -309,15 +314,16 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
|||||||
$diff_array = array_diff_assoc($qtyordred, $qtyshipped);
|
$diff_array = array_diff_assoc($qtyordred, $qtyshipped);
|
||||||
if (count($diff_array) == 0) {
|
if (count($diff_array) == 0) {
|
||||||
//No diff => mean everythings is shipped
|
//No diff => mean everythings is shipped
|
||||||
$ret = $object->setStatut(Commande::STATUS_CLOSED, $object->origin_id, $object->origin, 'ORDER_CLOSE');
|
$ret = $order->setStatut(Commande::STATUS_CLOSED, $object->origin_id, $object->origin, 'ORDER_CLOSE');
|
||||||
if ($ret < 0) {
|
if ($ret < 0) {
|
||||||
$this->error = $object->error;
|
$this->error = $order->error;
|
||||||
$this->errors = $object->errors;
|
$this->errors = $order->errors;
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// classify billed reception
|
// classify billed reception
|
||||||
if ($action == 'BILL_SUPPLIER_VALIDATE') {
|
if ($action == 'BILL_SUPPLIER_VALIDATE') {
|
||||||
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id, LOG_DEBUG);
|
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id, LOG_DEBUG);
|
||||||
|
|||||||
@@ -471,7 +471,7 @@ class CommandeFournisseur extends CommonOrder
|
|||||||
$sql .= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as l";
|
$sql .= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as l";
|
||||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product = p.rowid';
|
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product = p.rowid';
|
||||||
if (!empty($conf->global->PRODUCT_USE_SUPPLIER_PACKAGING)) {
|
if (!empty($conf->global->PRODUCT_USE_SUPPLIER_PACKAGING)) {
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON l.fk_product = pfp.fk_product and l.ref = pfp.ref_fourn";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON l.fk_product = pfp.fk_product and l.ref = pfp.ref_fourn AND pfp.fk_soc = ".$this->socid;
|
||||||
}
|
}
|
||||||
$sql .= " WHERE l.fk_commande = ".$this->id;
|
$sql .= " WHERE l.fk_commande = ".$this->id;
|
||||||
if ($only_product) {
|
if ($only_product) {
|
||||||
|
|||||||
@@ -86,6 +86,9 @@ if (($id > 0) || $ref) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||||
|
$hookmanager->initHooks(array('holidaycard', 'globalcard'));
|
||||||
|
|
||||||
$cancreate = 0;
|
$cancreate = 0;
|
||||||
|
|
||||||
if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->holiday->writeall_advance)) {
|
if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->holiday->writeall_advance)) {
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ if (!empty($conf->holiday->enabled) && $user->rights->holiday->read) {
|
|||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
print '<td class="nowraponall">'.$holidaystatic->getNomUrl(1).'</td>';
|
print '<td class="nowraponall">'.$holidaystatic->getNomUrl(1).'</td>';
|
||||||
print '<td class="tdoverflowmax125">'.$userstatic->getNomUrl(-1, 'leave').'</td>';
|
print '<td class="tdoverflowmax125">'.$userstatic->getNomUrl(-1, 'leave').'</td>';
|
||||||
print '<td class="tdoverflowmax100" title="'.dol_escape_htmltag($typeleaves[$obj->fk_type]['label']).'">'.dol_escape_htmltag($typeleaves[$obj->fk_type]['label']).'</td>';
|
print '<td class="tdoverflowmax100" title="'.dol_escape_htmltag($langs->trans($typeleaves[$obj->fk_type]['code'])).'">'.dol_escape_htmltag($langs->trans($typeleaves[$obj->fk_type]['code'])).'</td>';
|
||||||
|
|
||||||
$starthalfday = ($obj->halfday == -1 || $obj->halfday == 2) ? 'afternoon' : 'morning';
|
$starthalfday = ($obj->halfday == -1 || $obj->halfday == 2) ? 'afternoon' : 'morning';
|
||||||
$endhalfday = ($obj->halfday == 1 || $obj->halfday == 2) ? 'morning' : 'afternoon';
|
$endhalfday = ($obj->halfday == 1 || $obj->halfday == 2) ? 'morning' : 'afternoon';
|
||||||
|
|||||||
@@ -175,6 +175,9 @@ class Odf
|
|||||||
'<style:style style:name="supText" style:family="text"><style:text-properties style:text-position="super 58%" /></style:style>'
|
'<style:style style:name="supText" style:family="text"><style:text-properties style:text-position="super 58%" /></style:style>'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$customStyles = array();
|
||||||
|
$fontDeclarations = array();
|
||||||
|
|
||||||
$convertedValue = $this->_replaceHtmlWithOdtTag($this->_getDataFromHtml($value), $customStyles, $fontDeclarations);
|
$convertedValue = $this->_replaceHtmlWithOdtTag($this->_getDataFromHtml($value), $customStyles, $fontDeclarations);
|
||||||
|
|
||||||
foreach ($customStyles as $key => $val) {
|
foreach ($customStyles as $key => $val) {
|
||||||
@@ -540,8 +543,9 @@ IMG;
|
|||||||
*/
|
*/
|
||||||
private function _parse($type = 'content')
|
private function _parse($type = 'content')
|
||||||
{
|
{
|
||||||
// Search all tags fou into condition to complete $this->vars, so we will proceed all tests even if not defined
|
// Search all tags found into condition to complete $this->vars, so we will proceed all tests even if not defined
|
||||||
$reg='@\[!--\sIF\s([{}a-zA-Z0-9\.\,_]+)\s--\]@smU';
|
$reg='@\[!--\sIF\s([{}a-zA-Z0-9\.\,_]+)\s--\]@smU';
|
||||||
|
$matches = array();
|
||||||
preg_match_all($reg, $this->contentXml, $matches, PREG_SET_ORDER);
|
preg_match_all($reg, $this->contentXml, $matches, PREG_SET_ORDER);
|
||||||
|
|
||||||
//var_dump($this->vars);exit;
|
//var_dump($this->vars);exit;
|
||||||
|
|||||||
@@ -21,18 +21,18 @@
|
|||||||
--
|
--
|
||||||
|
|
||||||
-- Bank Thirdparty
|
-- Bank Thirdparty
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines) VALUES (0,'banque','thirdparty','',0,null,null,'(YourSEPAMandate)',1,'$conf->societe->enabled && $conf->banque->enabled && $conf->prelevement->enabled',0,'__(YourSEPAMandate)__','__(Hello)__,<br><br>\n\n__(FindYourSEPAMandate)__ :<br>\n__MYCOMPANY_NAME__<br>\n__MYCOMPANY_FULLADDRESS__<br><br>\n__(Sincerely)__<br>\n__USER_SIGNATURE__',null);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'banque','thirdparty','',0,null,null,'(YourSEPAMandate)',1,'$conf->societe->enabled && $conf->banque->enabled && $conf->prelevement->enabled',0,'__(YourSEPAMandate)__','__(Hello)__,<br><br>\n\n__(FindYourSEPAMandate)__ :<br>\n__MYCOMPANY_NAME__<br>\n__MYCOMPANY_FULLADDRESS__<br><br>\n__(Sincerely)__<br>\n__USER_SIGNATURE__',null, 0);
|
||||||
|
|
||||||
-- Members
|
-- Members
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnAutoSubscription)' ,10,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipRequestWasReceived)__','__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(ThisIsContentOfYourMembershipRequestWasReceived)__<br>\n<br>__ONLINE_PAYMENT_TEXT_AND_URL__<br>\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnAutoSubscription)' ,10,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipRequestWasReceived)__','__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(ThisIsContentOfYourMembershipRequestWasReceived)__<br>\n<br>__ONLINE_PAYMENT_TEXT_AND_URL__<br>\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(ThisIsContentOfYourMembershipWasValidated)__<br>__(FirstName)__ : __MEMBER_FIRSTNAME__<br>__(LastName)__ : __MEMBER_LASTNAME__<br>__(ID)__ : __MEMBER_ID__<br>\n<br>__ONLINE_PAYMENT_TEXT_AND_URL__<br>\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(ThisIsContentOfYourMembershipWasValidated)__<br>__(FirstName)__ : __MEMBER_FIRSTNAME__<br>__(LastName)__ : __MEMBER_LASTNAME__<br>__(ID)__ : __MEMBER_ID__<br>\n<br>__ONLINE_PAYMENT_TEXT_AND_URL__<br>\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnNewSubscription)' ,30,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourSubscriptionWasRecorded)__', '__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(ThisIsContentOfYourSubscriptionWasRecorded)__<br>\n\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 1);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnNewSubscription)' ,30,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourSubscriptionWasRecorded)__', '__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(ThisIsContentOfYourSubscriptionWasRecorded)__<br>\n\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 1);
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingReminderForExpiredSubscription)',40,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(SubscriptionReminderEmail)__', '__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(ThisIsContentOfSubscriptionReminderEmail)__<br>\n<br>__ONLINE_PAYMENT_TEXT_AND_URL__<br>\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingReminderForExpiredSubscription)',40,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(SubscriptionReminderEmail)__', '__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(ThisIsContentOfSubscriptionReminderEmail)__<br>\n<br>__ONLINE_PAYMENT_TEXT_AND_URL__<br>\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnCancelation)' ,50,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasCanceled)__', '__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(YourMembershipWasCanceled)__<br>\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnCancelation)' ,50,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasCanceled)__', '__(Hello)__ __MEMBER_FULLNAME__,<br><br>\n\n__(YourMembershipWasCanceled)__<br>\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingAnEMailToMember)' ,60,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(CardContent)__', '__(Hello)__,<br><br>\n\n__(ThisIsContentOfYourCard)__<br>\n__(ID)__ : __ID__<br>\n__(Civiliyty)__ : __MEMBER_CIVILITY__<br>\n__(Firstname)__ : __MEMBER_FIRSTNAME__<br>\n__(Lastname)__ : __MEMBER_LASTNAME__<br>\n__(Fullname)__ : __MEMBER_FULLNAME__<br>\n__(Company)__ : __MEMBER_COMPANY__<br>\n__(Address)__ : __MEMBER_ADDRESS__<br>\n__(Zip)__ : __MEMBER_ZIP__<br>\n__(Town)__ : __MEMBER_TOWN__<br>\n__(Country)__ : __MEMBER_COUNTRY__<br>\n__(Email)__ : __MEMBER_EMAIL__<br>\n__(Birthday)__ : __MEMBER_BIRTH__<br>\n__(Photo)__ : __MEMBER_PHOTO__<br>\n__(Login)__ : __MEMBER_LOGIN__<br>\n__(Password)__ : __MEMBER_PASSWORD__<br>\n__(Phone)__ : __MEMBER_PHONE__<br>\n__(PhonePerso)__ : __MEMBER_PHONEPRO__<br>\n__(PhoneMobile)__ : __MEMBER_PHONEMOBILE__<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingAnEMailToMember)' ,60,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(CardContent)__', '__(Hello)__,<br><br>\n\n__(ThisIsContentOfYourCard)__<br>\n__(ID)__ : __ID__<br>\n__(Civiliyty)__ : __MEMBER_CIVILITY__<br>\n__(Firstname)__ : __MEMBER_FIRSTNAME__<br>\n__(Lastname)__ : __MEMBER_LASTNAME__<br>\n__(Fullname)__ : __MEMBER_FULLNAME__<br>\n__(Company)__ : __MEMBER_COMPANY__<br>\n__(Address)__ : __MEMBER_ADDRESS__<br>\n__(Zip)__ : __MEMBER_ZIP__<br>\n__(Town)__ : __MEMBER_TOWN__<br>\n__(Country)__ : __MEMBER_COUNTRY__<br>\n__(Email)__ : __MEMBER_EMAIL__<br>\n__(Birthday)__ : __MEMBER_BIRTH__<br>\n__(Photo)__ : __MEMBER_PHOTO__<br>\n__(Login)__ : __MEMBER_LOGIN__<br>\n__(Password)__ : __MEMBER_PASSWORD__<br>\n__(Phone)__ : __MEMBER_PHONE__<br>\n__(PhonePerso)__ : __MEMBER_PHONEPRO__<br>\n__(PhoneMobile)__ : __MEMBER_PHONEMOBILE__<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
||||||
|
|
||||||
-- Recruiting
|
-- Recruiting
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0,'recruitment','recruitmentcandidature_send','',0,null,null,'(AnswerCandidature)' ,100,'$conf->recruitment->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourCandidature)__', '__(Hello)__ __CANDIDATE_FULLNAME__,<br><br>\n\n__(YourCandidatureAnswerMessage)__<br>__ONLINE_INTERVIEW_SCHEDULER_TEXT_AND_URL__\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'recruitment','recruitmentcandidature_send','',0,null,null,'(AnswerCandidature)' ,100,'$conf->recruitment->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourCandidature)__', '__(Hello)__ __CANDIDATE_FULLNAME__,<br><br>\n\n__(YourCandidatureAnswerMessage)__<br>__ONLINE_INTERVIEW_SCHEDULER_TEXT_AND_URL__\n<br><br>\n__(Sincerely)__<br>__USER_SIGNATURE__',null, 0);
|
||||||
|
|
||||||
-- Event organization
|
-- Event organization
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskConf)', 10, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskConf)__', '__(Hello)__ __THIRDPARTY_NAME__,<br /><br />__(ThisIsContentOfYourOrganizationEventConfRequestWasReceived)__<br /><br />__ONLINE_PAYMENT_TEXT_AND_URL__<br /><br /><br />__(Sincerely)__<br />__USER_SIGNATURE__', null, '1', null);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskConf)', 10, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskConf)__', '__(Hello)__ __THIRDPARTY_NAME__,<br /><br />__(ThisIsContentOfYourOrganizationEventConfRequestWasReceived)__<br /><br />__ONLINE_PAYMENT_TEXT_AND_URL__<br /><br /><br />__(Sincerely)__<br />__USER_SIGNATURE__', null, '1', null);
|
||||||
@@ -41,3 +41,9 @@ INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private,
|
|||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailSubsEvent)', 40, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailSubsEvent)__', '__(Hello)__ __THIRDPARTY_NAME__,<br /><br />__(ThisIsContentOfYourOrganizationEventEventSubscriptionWasReceived)__<br /><br />__(Sincerely)__<br /><br />__MYCOMPANY_NAME__<br />__USER_SIGNATURE__', null, '1', null);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailSubsEvent)', 40, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailSubsEvent)__', '__(Hello)__ __THIRDPARTY_NAME__,<br /><br />__(ThisIsContentOfYourOrganizationEventEventSubscriptionWasReceived)__<br /><br />__(Sincerely)__<br /><br />__MYCOMPANY_NAME__<br />__USER_SIGNATURE__', null, '1', null);
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationMassEmailAttendees)', 50, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailAttendees)__', '__(Hello)__ __THIRDPARTY_NAME__,<br /><br />__(ThisIsContentOfYourOrganizationEventBulkMailToAttendees)__<br /><br />__(Sincerely)__<br />__USER_SIGNATURE__', null, '1', null);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationMassEmailAttendees)', 50, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailAttendees)__', '__(Hello)__ __THIRDPARTY_NAME__,<br /><br />__(ThisIsContentOfYourOrganizationEventBulkMailToAttendees)__<br /><br />__(Sincerely)__<br />__USER_SIGNATURE__', null, '1', null);
|
||||||
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationMassEmailSpeakers)', 60, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailSpeakers)__', '__(Hello)__ __THIRDPARTY_NAME__,<br /><br />__(ThisIsContentOfYourOrganizationEventBulkMailToSpeakers)__<br /><br />__(Sincerely)__<br />__USER_SIGNATURE__', null, '1', null);
|
INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationMassEmailSpeakers)', 60, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailSpeakers)__', '__(Hello)__ __THIRDPARTY_NAME__,<br /><br />__(ThisIsContentOfYourOrganizationEventBulkMailToSpeakers)__<br /><br />__(Sincerely)__<br />__USER_SIGNATURE__', null, '1', null);
|
||||||
|
|
||||||
|
-- Partnership
|
||||||
|
INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipWillSoonBeCanceled)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipWillSoonBeCanceledTopic)__', 0, '<body>\n <p>__(Hello)__,<br><br>\n__(YourPartnershipWillSoonBeCanceledContent)__</p>\n<br />\n\n<br />\n\n __(Sincerely)__ <br />\n __[MAIN_INFO_SOCIETE_NOM]__ <br />\n </body>\n');
|
||||||
|
INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipCanceled)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipCanceledTopic)__', 0, '<body>\n <p>__(Hello)__,<br><br>\n__(YourPartnershipCanceledContent)__</p>\n<br />\n\n<br />\n\n __(Sincerely)__ <br />\n __[MAIN_INFO_SOCIETE_NOM]__ <br />\n </body>\n');
|
||||||
|
INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipRefused)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipRefusedTopic)__', 0, '<body>\n <p>__(Hello)__,<br><br>\n__(YourPartnershipRefusedContent)__</p>\n<br />\n\n<br />\n\n __(Sincerely)__ <br />\n __[MAIN_INFO_SOCIETE_NOM]__ <br />\n </body>\n');
|
||||||
|
INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipAccepted)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipAcceptedTopic)__', 0, '<body>\n <p>__(Hello)__,<br><br>\n__(YourPartnershipAcceptedContent)__</p>\n<br />\n\n<br />\n\n __(Sincerely)__ <br />\n __[MAIN_INFO_SOCIETE_NOM]__ <br />\n </body>\n');
|
||||||
|
|||||||
@@ -596,3 +596,5 @@ create table llx_onlinesignature
|
|||||||
pathoffile varchar(255)
|
pathoffile varchar(255)
|
||||||
)ENGINE=innodb;
|
)ENGINE=innodb;
|
||||||
|
|
||||||
|
-- VMYSQL4.3 ALTER TABLE llx_partnership MODIFY COLUMN date_partnership_end date NULL;
|
||||||
|
-- VPGSQL8.2 ALTER TABLE llx_partnership ALTER COLUMN date_partnership_end DROP NOT NULL;
|
||||||
|
|||||||
@@ -32,6 +32,9 @@
|
|||||||
|
|
||||||
-- Missing in v14 or lower
|
-- Missing in v14 or lower
|
||||||
|
|
||||||
|
-- VMYSQL4.3 ALTER TABLE llx_partnership MODIFY COLUMN date_partnership_end date NULL;
|
||||||
|
-- VPGSQL8.2 ALTER TABLE llx_partnership ALTER COLUMN date_partnership_end DROP NOT NULL;
|
||||||
|
|
||||||
|
|
||||||
-- v15
|
-- v15
|
||||||
ALTER TABLE llx_product ADD COLUMN mandatory_period tinyint NULL DEFAULT 0;
|
ALTER TABLE llx_product ADD COLUMN mandatory_period tinyint NULL DEFAULT 0;
|
||||||
@@ -58,3 +61,5 @@ ALTER TABLE llx_product_customer_price MODIFY COLUMN ref_customer varchar(128);
|
|||||||
|
|
||||||
-- -- add action trigger
|
-- -- add action trigger
|
||||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) VALUES ('ORDER_SUPPLIER_CANCEL','Supplier order request canceled','Executed when a supplier order is canceled','order_supplier',13);
|
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) VALUES ('ORDER_SUPPLIER_CANCEL','Supplier order request canceled','Executed when a supplier order is canceled','order_supplier',13);
|
||||||
|
|
||||||
|
ALTER TABLE llx_product ADD COLUMN fk_default_bom integer DEFAULT NULL;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ CREATE TABLE llx_partnership(
|
|||||||
fk_soc integer,
|
fk_soc integer,
|
||||||
fk_member integer,
|
fk_member integer,
|
||||||
date_partnership_start date NOT NULL,
|
date_partnership_start date NOT NULL,
|
||||||
date_partnership_end date NOT NULL,
|
date_partnership_end date NULL,
|
||||||
entity integer DEFAULT 1 NOT NULL, -- multi company id, 0 = all
|
entity integer DEFAULT 1 NOT NULL, -- multi company id, 0 = all
|
||||||
reason_decline_or_cancel text NULL,
|
reason_decline_or_cancel text NULL,
|
||||||
date_creation datetime NOT NULL,
|
date_creation datetime NOT NULL,
|
||||||
|
|||||||
@@ -106,4 +106,6 @@ create table llx_product
|
|||||||
fk_project integer DEFAULT NULL, -- Used when product was generated by a project or is specifif to a project
|
fk_project integer DEFAULT NULL, -- Used when product was generated by a project or is specifif to a project
|
||||||
mandatory_period tinyint DEFAULT 0 -- is used to signal to the user that the start and end dates are mandatory for this type of product the fk_product_type == 1 (service) (non-blocking action)
|
mandatory_period tinyint DEFAULT 0 -- is used to signal to the user that the start and end dates are mandatory for this type of product the fk_product_type == 1 (service) (non-blocking action)
|
||||||
|
|
||||||
|
fk_default_bom integer DEFAULT NULL,
|
||||||
|
fk_project integer DEFAULT NULL -- Used when the product was generated by a project or is specific to a project
|
||||||
)ENGINE=innodb;
|
)ENGINE=innodb;
|
||||||
|
|||||||
@@ -1193,6 +1193,9 @@ SetupDescription2=The following two sections are mandatory (the two first entrie
|
|||||||
SetupDescription3=<a href="%s">%s -> %s</a><br><br>Basic parameters used to customize the default behavior of your application (e.g for country-related features).
|
SetupDescription3=<a href="%s">%s -> %s</a><br><br>Basic parameters used to customize the default behavior of your application (e.g for country-related features).
|
||||||
SetupDescription4=<a href="%s">%s -> %s</a><br><br>This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules.
|
SetupDescription4=<a href="%s">%s -> %s</a><br><br>This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules.
|
||||||
SetupDescription5=Other Setup menu entries manage optional parameters.
|
SetupDescription5=Other Setup menu entries manage optional parameters.
|
||||||
|
SetupDescriptionLink=<a href="%s">%s - %s</a>
|
||||||
|
SetupDescription3b=Basic parameters used to customize the default behavior of your application (e.g for country-related features).
|
||||||
|
SetupDescription4b=This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules.
|
||||||
AuditedSecurityEvents=Security events that are audited
|
AuditedSecurityEvents=Security events that are audited
|
||||||
NoSecurityEventsAreAduited=No security events are audited. You can enable them from menu %s
|
NoSecurityEventsAreAduited=No security events are audited. You can enable them from menu %s
|
||||||
Audit=Security events
|
Audit=Security events
|
||||||
@@ -1782,7 +1785,7 @@ ClickToDialSetup=Click To Dial module setup
|
|||||||
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
||||||
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
||||||
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
|
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
|
||||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need a link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill the next field.
|
||||||
##### Point Of Sale (CashDesk) #####
|
##### Point Of Sale (CashDesk) #####
|
||||||
CashDesk=Point of Sale
|
CashDesk=Point of Sale
|
||||||
CashDeskSetup=Point of Sales module setup
|
CashDeskSetup=Point of Sales module setup
|
||||||
@@ -1992,6 +1995,8 @@ MAIN_PDF_MARGIN_TOP=Top margin on PDF
|
|||||||
MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
|
MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
|
||||||
MAIN_DOCUMENTS_LOGO_HEIGHT=Height for logo on PDF
|
MAIN_DOCUMENTS_LOGO_HEIGHT=Height for logo on PDF
|
||||||
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add picture on proposal line
|
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add picture on proposal line
|
||||||
|
PROPOSAL_PDF_HIDE_PAYMENTTERM=Hide payments conditions
|
||||||
|
PROPOSAL_PDF_HIDE_PAYMENTMODE=Hide payment mode
|
||||||
MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING=Add electronic sign in PDF
|
MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING=Add electronic sign in PDF
|
||||||
NothingToSetup=There is no specific setup required for this module.
|
NothingToSetup=There is no specific setup required for this module.
|
||||||
SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
|
SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
|
||||||
@@ -2131,6 +2136,7 @@ AskThisIDToYourBank=Contact your bank to get this ID
|
|||||||
AdvancedModeOnly=Permision available in Advanced permission mode only
|
AdvancedModeOnly=Permision available in Advanced permission mode only
|
||||||
ConfFileIsReadableOrWritableByAnyUsers=The conf file is readable or writable by any users. Give permission to web server user and group only.
|
ConfFileIsReadableOrWritableByAnyUsers=The conf file is readable or writable by any users. Give permission to web server user and group only.
|
||||||
MailToSendEventOrganization=Event Organization
|
MailToSendEventOrganization=Event Organization
|
||||||
|
MailToPartnership=Partnership
|
||||||
AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form
|
AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form
|
||||||
YouShouldDisablePHPFunctions=You should disable PHP functions
|
YouShouldDisablePHPFunctions=You should disable PHP functions
|
||||||
IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands in custom code, you shoud disable PHP functions
|
IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands in custom code, you shoud disable PHP functions
|
||||||
@@ -2151,4 +2157,5 @@ DatabasePasswordObfuscated=Database password is obfuscated in conf file
|
|||||||
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
||||||
APIsAreNotEnabled=APIs modules are not enabled
|
APIsAreNotEnabled=APIs modules are not enabled
|
||||||
YouShouldSetThisToOff=You should set this to 0 or off
|
YouShouldSetThisToOff=You should set this to 0 or off
|
||||||
InstallAndUpgradeLockedBy=Install and upgrades are locked by the file <b>%s</b>
|
InstallAndUpgradeLockedBy=Install and upgrades are locked by the file <b>%s</b>
|
||||||
|
OldImplementation=Old implementation
|
||||||
|
|||||||
@@ -128,3 +128,4 @@ PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
|
|||||||
WeighingScale=Weighing scale
|
WeighingScale=Weighing scale
|
||||||
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
||||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
||||||
|
CustomerDisplay=Customer display
|
||||||
|
|||||||
@@ -133,3 +133,4 @@ WatermarkOnDraftHolidayCards=Watermarks on draft leave requests
|
|||||||
HolidaysToApprove=Holidays to approve
|
HolidaysToApprove=Holidays to approve
|
||||||
NobodyHasPermissionToValidateHolidays=Nobody has permission to validate holidays
|
NobodyHasPermissionToValidateHolidays=Nobody has permission to validate holidays
|
||||||
HolidayBalanceMonthlyUpdate=Monthly update of holiday balance
|
HolidayBalanceMonthlyUpdate=Monthly update of holiday balance
|
||||||
|
XIsAUsualNonWorkingDay=%s is usualy a NON working day
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
Language_am_ET=Ethiopian
|
Language_am_ET=Ethiopian
|
||||||
Language_ar_AR=Arabic
|
Language_ar_AR=Arabic
|
||||||
Language_ar_EG=Arabic (Egypt)
|
Language_ar_EG=Arabic (Egypt)
|
||||||
|
Language_ar_MA=Arabic (Moroco)
|
||||||
Language_ar_SA=Arabic
|
Language_ar_SA=Arabic
|
||||||
Language_ar_TN=Arabic (Tunisia)
|
Language_ar_TN=Arabic (Tunisia)
|
||||||
Language_ar_IQ=Arabic (Iraq)
|
Language_ar_IQ=Arabic (Iraq)
|
||||||
|
|||||||
@@ -77,6 +77,10 @@ YourPartnershipRefusedContent=We inform you that your partnership request has be
|
|||||||
YourPartnershipAcceptedContent=We inform you that your partnership request has been accepted.
|
YourPartnershipAcceptedContent=We inform you that your partnership request has been accepted.
|
||||||
YourPartnershipCanceledContent=We inform you that your partnership has been canceled.
|
YourPartnershipCanceledContent=We inform you that your partnership has been canceled.
|
||||||
|
|
||||||
|
CountLastUrlCheckError=Number of errors for last URL check
|
||||||
|
LastCheckBacklink=Date of last URL check
|
||||||
|
ReasonDeclineOrCancel=Reason for declining or canceling
|
||||||
|
|
||||||
#
|
#
|
||||||
# Status
|
# Status
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as b
|
|||||||
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
|
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||||
descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order)
|
descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||||
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update)
|
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update)
|
||||||
|
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Classify linked source sales order as shipped when a shipment is closed (and if the quantity shipped by all shipments is the same as in the order to update)
|
||||||
# Autoclassify purchase order
|
# Autoclassify purchase order
|
||||||
descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal)
|
descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal)
|
||||||
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
|
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classer la/les proposition(s) commer
|
|||||||
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classer la/les commande(s) client(s) source(s) facturée(s) à la validation de la facture client (et si le montant de la facture est le même que le montant total des commandes liées)
|
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classer la/les commande(s) client(s) source(s) facturée(s) à la validation de la facture client (et si le montant de la facture est le même que le montant total des commandes liées)
|
||||||
descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classer la/les commande(s) client(s) source(s) à Facturée quand une facture client est passée à Payé (et si le montant de la facture est identique à la somme des commandes sources)
|
descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classer la/les commande(s) client(s) source(s) à Facturée quand une facture client est passée à Payé (et si le montant de la facture est identique à la somme des commandes sources)
|
||||||
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classer la commande source à expédiée à la validation d'une expédition (et si les quantités expédiées dans le bon d'expédition sont les même que dans la commande mise à jour)
|
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classer la commande source à expédiée à la validation d'une expédition (et si les quantités expédiées dans le bon d'expédition sont les même que dans la commande mise à jour)
|
||||||
|
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Classer la commande source à expédiée à la cloture d'une expédition (et si les quantités expédiées dans le bon d'expédition sont les même que dans la commande mise à jour)
|
||||||
# Autoclassify purchase order
|
# Autoclassify purchase order
|
||||||
descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classer la ou les proposition(s) commerciale(s) fournisseur sources facturées quand une facture fournisseur est validée (et si le montant de la facture est le même que le total des propositions sources liées)
|
descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classer la ou les proposition(s) commerciale(s) fournisseur sources facturées quand une facture fournisseur est validée (et si le montant de la facture est le même que le total des propositions sources liées)
|
||||||
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classer la ou les commande(s) fournisseur(s) de source(s) à facturée(s) lorsque la facture fournisseur est validée (et si le montant de la facture est le même que le montant total des commandes liées)
|
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classer la ou les commande(s) fournisseur(s) de source(s) à facturée(s) lorsque la facture fournisseur est validée (et si le montant de la facture est le même que le montant total des commandes liées)
|
||||||
|
|||||||
@@ -2015,27 +2015,25 @@ function top_menu_user($hideloginname = 0, $urllogout = '')
|
|||||||
$dropdownBody .= '<span id="topmenulogincompanyinfo-btn"><i class="fa fa-caret-right"></i> '.$langs->trans("ShowCompanyInfos").'</span>';
|
$dropdownBody .= '<span id="topmenulogincompanyinfo-btn"><i class="fa fa-caret-right"></i> '.$langs->trans("ShowCompanyInfos").'</span>';
|
||||||
$dropdownBody .= '<div id="topmenulogincompanyinfo" >';
|
$dropdownBody .= '<div id="topmenulogincompanyinfo" >';
|
||||||
|
|
||||||
if (!empty($conf->global->MAIN_INFO_SIREN)) {
|
if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') {
|
||||||
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId1Short", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_SIREN).'</span>';
|
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId1", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_SIREN).'</span>';
|
||||||
}
|
}
|
||||||
if (!empty($conf->global->MAIN_INFO_SIRET)) {
|
if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') {
|
||||||
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId2Short", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_SIRET).'</span>';
|
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId2", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_SIRET).'</span>';
|
||||||
}
|
}
|
||||||
if (!empty($conf->global->MAIN_INFO_APE)) {
|
if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') {
|
||||||
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId3Short", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_APE).'</span>';
|
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId3", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_APE).'</span>';
|
||||||
}
|
}
|
||||||
if (!empty($conf->global->MAIN_INFO_RCS)) {
|
if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') {
|
||||||
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId4Short", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_RCS).'</span>';
|
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId4", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_RCS).'</span>';
|
||||||
}
|
}
|
||||||
if (!empty($conf->global->MAIN_INFO_PROFID5)) {
|
if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') {
|
||||||
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId5Short", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_PROFID5).'</span>';
|
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId5", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_PROFID5).'</span>';
|
||||||
}
|
}
|
||||||
if (!empty($conf->global->MAIN_INFO_PROFID6)) {
|
if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') {
|
||||||
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId6Short", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_PROFID6).'</span>';
|
$dropdownBody .= '<br><b>'.$langs->transcountry("ProfId6", $mysoc->country_code).'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_PROFID6).'</span>';
|
||||||
}
|
|
||||||
if (!empty($conf->global->MAIN_INFO_TVAINTRA)) {
|
|
||||||
$dropdownBody .= '<br><b>'.$langs->trans("VATIntraShort").'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_TVAINTRA).'</span>';
|
|
||||||
}
|
}
|
||||||
|
$dropdownBody .= '<br><b>'.$langs->trans("VATIntraShort").'</b>: <span>'.showValueWithClipboardCPButton($conf->global->MAIN_INFO_TVAINTRA).'</span>';
|
||||||
|
|
||||||
$dropdownBody .= '</div>';
|
$dropdownBody .= '</div>';
|
||||||
|
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ class Mo extends CommonObject
|
|||||||
'date_end_planned' => array('type'=>'datetime', 'label'=>'DateEndPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>56, 'notnull'=>-1, 'index'=>1,),
|
'date_end_planned' => array('type'=>'datetime', 'label'=>'DateEndPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>56, 'notnull'=>-1, 'index'=>1,),
|
||||||
'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,),
|
'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,),
|
||||||
'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>1, 'visible'=>0, 'position'=>1010),
|
'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>1, 'visible'=>0, 'position'=>1010),
|
||||||
'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>2, 'position'=>1000, 'default'=>0, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validated', '2'=>'InProgress', '3'=>'StatusMOProduced', '9'=>'Canceled')),
|
'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>2, 'position'=>1000, 'default'=>0, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '2'=>'InProgress', '3'=>'StatusMOProduced', '9'=>'Canceled')),
|
||||||
);
|
);
|
||||||
public $rowid;
|
public $rowid;
|
||||||
public $ref;
|
public $ref;
|
||||||
|
|||||||
@@ -65,8 +65,9 @@ class Partnership extends CommonObject
|
|||||||
|
|
||||||
|
|
||||||
const STATUS_DRAFT = 0;
|
const STATUS_DRAFT = 0;
|
||||||
const STATUS_ACCEPTED = 1;
|
const STATUS_VALIDATED = 1; // Validate (no more draft)
|
||||||
const STATUS_REFUSED = 2;
|
const STATUS_ACCEPTED = 2; // Approved
|
||||||
|
const STATUS_REFUSED = 3; // Refused
|
||||||
const STATUS_CANCELED = 9;
|
const STATUS_CANCELED = 9;
|
||||||
|
|
||||||
|
|
||||||
@@ -100,7 +101,27 @@ class Partnership extends CommonObject
|
|||||||
/**
|
/**
|
||||||
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
|
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
|
||||||
*/
|
*/
|
||||||
public $fields=array();
|
public $fields=array(
|
||||||
|
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
|
||||||
|
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>4, 'noteditable'=>'1', 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'comment'=>"Reference of object"),
|
||||||
|
'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => 1, 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1),
|
||||||
|
//'fk_type' => array('type' => 'integer:PartnershipType:partnership/class/partnershiptype.class.php', 'label' => 'Type', 'default' => 1, 'enabled' => 1, 'visible' => 1, 'position' => 20),
|
||||||
|
'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>61, 'notnull'=>0, 'visible'=>0,),
|
||||||
|
'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>62, 'notnull'=>0, 'visible'=>0,),
|
||||||
|
'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,),
|
||||||
|
'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,),
|
||||||
|
'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',),
|
||||||
|
'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,),
|
||||||
|
'last_main_doc' => array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>0,),
|
||||||
|
'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,),
|
||||||
|
'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,),
|
||||||
|
'date_partnership_start' => array('type'=>'date', 'label'=>'DatePartnershipStart', 'enabled'=>'1', 'position'=>52, 'notnull'=>1, 'visible'=>1,),
|
||||||
|
'date_partnership_end' => array('type'=>'date', 'label'=>'DatePartnershipEnd', 'enabled'=>'1', 'position'=>53, 'notnull'=>0, 'visible'=>1,),
|
||||||
|
'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>54, 'notnull'=>0, 'visible'=>2, 'index'=>1, 'arrayofkeyval'=>array('-1'=>'','0'=>'Draft', '1'=>'Accepted', '2'=>'Refused', '9'=>'Canceled'),),
|
||||||
|
'count_last_url_check_error' => array('type'=>'integer', 'label'=>'CountLastUrlCheckError', 'enabled'=>'1', 'position'=>63, 'notnull'=>0, 'visible'=>-2, 'default'=>'0',),
|
||||||
|
'last_check_backlink' => array('type'=>'datetime', 'label'=>'LastCheckBacklink', 'enabled'=>'1', 'position'=>65, 'notnull'=>0, 'visible'=>-2,),
|
||||||
|
'reason_decline_or_cancel' => array('type'=>'text', 'label'=>'ReasonDeclineOrCancel', 'enabled'=>'1', 'position'=>64, 'notnull'=>0, 'visible'=>-2,),
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var int rowid
|
* @var int rowid
|
||||||
@@ -164,7 +185,6 @@ class Partnership extends CommonObject
|
|||||||
// public $lines = array();
|
// public $lines = array();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
@@ -176,32 +196,10 @@ class Partnership extends CommonObject
|
|||||||
|
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
|
|
||||||
$this->fields=array(
|
|
||||||
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
|
|
||||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>4, 'noteditable'=>'1', 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'comment'=>"Reference of object"),
|
|
||||||
'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => 1, 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1),
|
|
||||||
//'fk_type' => array('type' => 'integer:PartnershipType:partnership/class/partnershiptype.class.php', 'label' => 'Type', 'default' => 1, 'enabled' => 1, 'visible' => 1, 'position' => 20),
|
|
||||||
'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>61, 'notnull'=>0, 'visible'=>0,),
|
|
||||||
'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>62, 'notnull'=>0, 'visible'=>0,),
|
|
||||||
'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,),
|
|
||||||
'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,),
|
|
||||||
'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',),
|
|
||||||
'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,),
|
|
||||||
'last_main_doc' => array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>0,),
|
|
||||||
'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,),
|
|
||||||
'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,),
|
|
||||||
'date_partnership_start' => array('type'=>'date', 'label'=>'DatePartnershipStart', 'enabled'=>'1', 'position'=>52, 'notnull'=>1, 'visible'=>1,),
|
|
||||||
'date_partnership_end' => array('type'=>'date', 'label'=>'DatePartnershipEnd', 'enabled'=>'1', 'position'=>53, 'notnull'=>1, 'visible'=>1,),
|
|
||||||
'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>54, 'notnull'=>0, 'visible'=>2, 'index'=>1, 'arrayofkeyval'=>array('-1'=>'','0'=>$langs->trans('Draft'), '1'=>$langs->trans('Accepted'), '2'=>$langs->trans('Refused'), '9'=>$langs->trans('Canceled')),),
|
|
||||||
'count_last_url_check_error' => array('type'=>'integer', 'label'=>'CountLastUrlCheckError', 'enabled'=>'1', 'position'=>63, 'notnull'=>0, 'visible'=>-2, 'default'=>'0',),
|
|
||||||
'last_check_backlink' => array('type'=>'datetime', 'label'=>'LastCheckBacklink', 'enabled'=>'1', 'position'=>65, 'notnull'=>0, 'visible'=>-2,),
|
|
||||||
'reason_decline_or_cancel' => array('type'=>'text', 'label'=>'ReasonDeclineOrCancel', 'enabled'=>'1', 'position'=>64, 'notnull'=>0, 'visible'=>-2,),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!empty($conf->global->PARTNERSHIP_IS_MANAGED_FOR) && $conf->global->PARTNERSHIP_IS_MANAGED_FOR == 'member') {
|
if (!empty($conf->global->PARTNERSHIP_IS_MANAGED_FOR) && $conf->global->PARTNERSHIP_IS_MANAGED_FOR == 'member') {
|
||||||
$this->fields['fk_member'] = array('type'=>'integer:Adherent:adherents/class/adherent.class.php:1', 'label'=>'Member', 'enabled'=>'1', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'picto'=>'member');
|
$this->fields['fk_member'] = array('type'=>'integer:Adherent:adherents/class/adherent.class.php:1', 'label'=>'Member', 'enabled'=>'1', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'picto'=>'member');
|
||||||
} else {
|
} else {
|
||||||
$this->fields['fk_soc'] = array('type'=>'integer:Societe:societe/class/societe.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label'=>'ThirdParty', 'enabled'=>'1', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'picto'=>'societe');
|
$this->fields['fk_soc'] = array('type'=>'integer:Societe:societe/class/societe.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label'=>'ThirdParty', 'enabled'=>'1', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'picto'=>'company');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields['rowid'])) {
|
if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields['rowid'])) {
|
||||||
@@ -593,7 +591,7 @@ class Partnership extends CommonObject
|
|||||||
$error = 0;
|
$error = 0;
|
||||||
|
|
||||||
// Protection
|
// Protection
|
||||||
if ($this->status == self::STATUS_ACCEPTED) {
|
if ($this->status == self::STATUS_VALIDATED) {
|
||||||
dol_syslog(get_class($this)."::validate action abandonned: already validated", LOG_WARNING);
|
dol_syslog(get_class($this)."::validate action abandonned: already validated", LOG_WARNING);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -622,7 +620,7 @@ class Partnership extends CommonObject
|
|||||||
// Validate
|
// Validate
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
|
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
|
||||||
$sql .= " SET ref = '".$this->db->escape($num)."',";
|
$sql .= " SET ref = '".$this->db->escape($num)."',";
|
||||||
$sql .= " status = ".self::STATUS_ACCEPTED;
|
$sql .= " status = ".self::STATUS_VALIDATED;
|
||||||
if (!empty($this->fields['date_validation'])) {
|
if (!empty($this->fields['date_validation'])) {
|
||||||
$sql .= ", date_validation = '".$this->db->idate($now)."'";
|
$sql .= ", date_validation = '".$this->db->idate($now)."'";
|
||||||
}
|
}
|
||||||
@@ -689,7 +687,7 @@ class Partnership extends CommonObject
|
|||||||
// Set new ref and current status
|
// Set new ref and current status
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$this->ref = $num;
|
$this->ref = $num;
|
||||||
$this->status = self::STATUS_ACCEPTED;
|
$this->status = self::STATUS_VALIDATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
@@ -1067,17 +1065,24 @@ class Partnership extends CommonObject
|
|||||||
global $langs;
|
global $langs;
|
||||||
//$langs->load("partnership");
|
//$langs->load("partnership");
|
||||||
$this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft');
|
$this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft');
|
||||||
|
$this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Validated');
|
||||||
$this->labelStatus[self::STATUS_ACCEPTED] = $langs->trans('Accepted');
|
$this->labelStatus[self::STATUS_ACCEPTED] = $langs->trans('Accepted');
|
||||||
$this->labelStatus[self::STATUS_REFUSED] = $langs->trans('Refused');
|
$this->labelStatus[self::STATUS_REFUSED] = $langs->trans('Refused');
|
||||||
$this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
$this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
||||||
$this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('Draft');
|
$this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('Draft');
|
||||||
|
$this->labelStatusShort[self::STATUS_VALIDATED] = $langs->trans('Validated');
|
||||||
$this->labelStatusShort[self::STATUS_ACCEPTED] = $langs->trans('Accepted');
|
$this->labelStatusShort[self::STATUS_ACCEPTED] = $langs->trans('Accepted');
|
||||||
$this->labelStatusShort[self::STATUS_REFUSED] = $langs->trans('Refused');
|
$this->labelStatusShort[self::STATUS_REFUSED] = $langs->trans('Refused');
|
||||||
$this->labelStatusShort[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
$this->labelStatusShort[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
||||||
}
|
}
|
||||||
|
|
||||||
$statusType = 'status'.$status;
|
$statusType = 'status'.$status;
|
||||||
//if ($status == self::STATUS_ACCEPTED) $statusType = 'status1';
|
if ($status == self::STATUS_ACCEPTED) {
|
||||||
|
$statusType = 'status4';
|
||||||
|
}
|
||||||
|
if ($status == self::STATUS_REFUSED) {
|
||||||
|
$statusType = 'status9';
|
||||||
|
}
|
||||||
if ($status == self::STATUS_CANCELED) {
|
if ($status == self::STATUS_CANCELED) {
|
||||||
$statusType = 'status6';
|
$statusType = 'status6';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
/* Copyright (C) 2017-2021 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2021 NextGestion <contact@nextgestion.com>
|
* Copyright (C) 2021 NextGestion <contact@nextgestion.com>
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -120,7 +120,39 @@ if (empty($reshook)) {
|
|||||||
$triggermodname = 'PARTNERSHIP_MODIFY'; // Name of trigger action code to execute when we modify record
|
$triggermodname = 'PARTNERSHIP_MODIFY'; // Name of trigger action code to execute when we modify record
|
||||||
|
|
||||||
// Action accept object
|
// Action accept object
|
||||||
if ($action == 'confirm_accept' && $confirm == 'yes' && $permissiontoadd) {
|
if ($action == 'confirm_validate' && $confirm == 'yes' && $permissiontoadd) {
|
||||||
|
$result = $object->validate($user);
|
||||||
|
if ($result >= 0) {
|
||||||
|
// Define output language
|
||||||
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||||
|
if (method_exists($object, 'generateDocument')) {
|
||||||
|
$outputlangs = $langs;
|
||||||
|
$newlang = '';
|
||||||
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) {
|
||||||
|
$newlang = GETPOST('lang_id', 'aZ09');
|
||||||
|
}
|
||||||
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
|
||||||
|
$newlang = $object->thirdparty->default_lang;
|
||||||
|
}
|
||||||
|
if (!empty($newlang)) {
|
||||||
|
$outputlangs = new Translate("", $conf);
|
||||||
|
$outputlangs->setDefaultLang($newlang);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret = $object->fetch($id); // Reload to get new records
|
||||||
|
|
||||||
|
$model = $object->model_pdf;
|
||||||
|
|
||||||
|
$retgen = $object->generateDocument($model, $outputlangs, 0, 0, 0);
|
||||||
|
if ($retgen < 0) {
|
||||||
|
setEventMessages($object->error, $object->errors, 'warnings');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
}
|
||||||
|
} elseif ($action == 'confirm_accept' && $confirm == 'yes' && $permissiontoadd) {
|
||||||
$result = $object->accept($user);
|
$result = $object->accept($user);
|
||||||
if ($result >= 0) {
|
if ($result >= 0) {
|
||||||
// Define output language
|
// Define output language
|
||||||
@@ -143,7 +175,7 @@ if (empty($reshook)) {
|
|||||||
|
|
||||||
$model = $object->model_pdf;
|
$model = $object->model_pdf;
|
||||||
|
|
||||||
$retgen = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
$retgen = $object->generateDocument($model, $outputlangs, 0, 0, 0);
|
||||||
if ($retgen < 0) {
|
if ($retgen < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'warnings');
|
setEventMessages($object->error, $object->errors, 'warnings');
|
||||||
}
|
}
|
||||||
@@ -339,7 +371,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToReopon'), $langs->trans('ConfirmReoponAsk', $object->ref), 'confirm_reopen', $formquestion, 'yes', 1);
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToReopon'), $langs->trans('ConfirmReoponAsk', $object->ref), 'confirm_reopen', $formquestion, 'yes', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Refuse confirmatio
|
// Refuse confirmation
|
||||||
if ($action == 'refuse') {
|
if ($action == 'refuse') {
|
||||||
//Form to close proposal (signed or not)
|
//Form to close proposal (signed or not)
|
||||||
$formquestion = array(
|
$formquestion = array(
|
||||||
@@ -533,23 +565,35 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
print dolGetButtonAction($langs->trans('SendMail'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&mode=init&token='.newToken().'#formmailbeforetitle');
|
print dolGetButtonAction($langs->trans('SendMail'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&mode=init&token='.newToken().'#formmailbeforetitle');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($object->status == $object::STATUS_DRAFT) {
|
||||||
|
print dolGetButtonAction($langs->trans('Modify'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit&token='.newToken(), '', $permissiontoadd);
|
||||||
|
}
|
||||||
|
|
||||||
// Back to draft
|
// Back to draft
|
||||||
if ($object->status != $object::STATUS_DRAFT) {
|
if ($object->status != $object::STATUS_DRAFT) {
|
||||||
print dolGetButtonAction($langs->trans('SetToDraft'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_setdraft&confirm=yes&token='.newToken(), '', $permissiontoadd);
|
print dolGetButtonAction($langs->trans('SetToDraft'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_setdraft&confirm=yes&token='.newToken(), '', $permissiontoadd);
|
||||||
}
|
}
|
||||||
|
|
||||||
print dolGetButtonAction($langs->trans('Modify'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit&token='.newToken(), '', $permissiontoadd);
|
// Validate
|
||||||
|
|
||||||
// Accept
|
|
||||||
if ($object->status == $object::STATUS_DRAFT) {
|
if ($object->status == $object::STATUS_DRAFT) {
|
||||||
if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
|
if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
|
||||||
print dolGetButtonAction($langs->trans('Validate'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_accept&confirm=yes&token='.newToken(), '', $permissiontoadd);
|
print dolGetButtonAction($langs->trans('Validate'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_validate&confirm=yes&token='.newToken(), '', $permissiontoadd);
|
||||||
} else {
|
} else {
|
||||||
$langs->load("errors");
|
$langs->load("errors");
|
||||||
print dolGetButtonAction($langs->trans("ErrorAddAtLeastOneLineFirst"), $langs->trans("Validate"), 'default', '#', '', 0);
|
print dolGetButtonAction($langs->trans("ErrorAddAtLeastOneLineFirst"), $langs->trans("Validate"), 'default', '#', '', 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Approve
|
||||||
|
if ($object->status == $object::STATUS_VALIDATED) {
|
||||||
|
if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
|
||||||
|
print dolGetButtonAction($langs->trans('Approved'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_accept&confirm=yes&token='.newToken(), '', $permissiontoadd);
|
||||||
|
} else {
|
||||||
|
$langs->load("errors");
|
||||||
|
print dolGetButtonAction($langs->trans("ErrorAddAtLeastOneLineFirst"), $langs->trans("Approved"), 'default', '#', '', 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Cancel
|
// Cancel
|
||||||
if ($permissiontoadd) {
|
if ($permissiontoadd) {
|
||||||
if ($object->status == $object::STATUS_ACCEPTED) {
|
if ($object->status == $object::STATUS_ACCEPTED) {
|
||||||
@@ -562,7 +606,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
|
|
||||||
// Refuse
|
// Refuse
|
||||||
if ($permissiontoadd) {
|
if ($permissiontoadd) {
|
||||||
if ($object->status != $object::STATUS_ACCEPTED && $object->status != $object::STATUS_CANCELED && $object->status != $object::STATUS_REFUSED) {
|
if ($object->status != $object::STATUS_DRAFT && $object->status != $object::STATUS_ACCEPTED && $object->status != $object::STATUS_CANCELED && $object->status != $object::STATUS_REFUSED) {
|
||||||
print dolGetButtonAction($langs->trans('Refuse'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=refuse&token='.newToken(), '', $permissiontoadd);
|
print dolGetButtonAction($langs->trans('Refuse'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=refuse&token='.newToken(), '', $permissiontoadd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,13 +64,12 @@ if (!empty($conf->commande->enabled)) {
|
|||||||
}
|
}
|
||||||
if (!empty($conf->accounting->enabled)) {
|
if (!empty($conf->accounting->enabled)) {
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
}
|
|
||||||
if (!empty($conf->accounting->enabled)) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
|
||||||
}
|
|
||||||
if (!empty($conf->accounting->enabled)) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
|
||||||
}
|
}
|
||||||
|
if (!empty($conf->bom->enabled)) {
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php';
|
||||||
|
}
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array('products', 'other'));
|
$langs->loadLangs(array('products', 'other'));
|
||||||
@@ -523,6 +522,13 @@ if (empty($reshook)) {
|
|||||||
$object->finished = null;
|
$object->finished = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$fk_default_bom = GETPOST('fk_default_bom', 'int');
|
||||||
|
if ($fk_default_bom >= 0) {
|
||||||
|
$object->fk_default_bom = $fk_default_bom;
|
||||||
|
} else {
|
||||||
|
$object->fk_default_bom = null;
|
||||||
|
}
|
||||||
|
|
||||||
$units = GETPOST('units', 'int');
|
$units = GETPOST('units', 'int');
|
||||||
if ($units > 0) {
|
if ($units > 0) {
|
||||||
$object->fk_unit = $units;
|
$object->fk_unit = $units;
|
||||||
@@ -1919,6 +1925,13 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
|
|
||||||
print '<table class="border centpercent">';
|
print '<table class="border centpercent">';
|
||||||
|
|
||||||
|
if (!$object->isService() && !empty($conf->bom->enabled)) {
|
||||||
|
print '<tr><td>'.$form->textwithpicto($langs->trans("DefaultBOM"), $langs->trans("DefaultBOMDesc")).'</td><td>';
|
||||||
|
$bomkey = "Bom:bom/class/bom.class.php:0:t.status=1 AND t.fk_product=".$object->id;
|
||||||
|
print $form->selectForForms($bomkey, 'fk_default_bom', $object->fk_default_bom, 1);
|
||||||
|
print '</td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($conf->global->PRODUCT_DISABLE_ACCOUNTING)) {
|
if (empty($conf->global->PRODUCT_DISABLE_ACCOUNTING)) {
|
||||||
if (!empty($conf->accounting->enabled)) {
|
if (!empty($conf->accounting->enabled)) {
|
||||||
// Accountancy_code_sell
|
// Accountancy_code_sell
|
||||||
@@ -2385,6 +2398,17 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
print '<tr><td>'.$langs->trans("QCFrequency").'</td><td>'.$object->qc_frequency.'</td></tr>';
|
print '<tr><td>'.$langs->trans("QCFrequency").'</td><td>'.$object->qc_frequency.'</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!$object->isService() && !empty($conf->bom->enabled)) {
|
||||||
|
print '<tr><td class="titlefield">'.$form->textwithpicto($langs->trans("DefaultBOM"), $langs->trans("DefaultBOMDesc")).'</td><td>';
|
||||||
|
if ($object->fk_default_bom) {
|
||||||
|
$bom_static = new BOM($db);
|
||||||
|
$bom_static->fetch($object->fk_default_bom);
|
||||||
|
print $bom_static->getNomUrl(1);
|
||||||
|
}
|
||||||
|
print '</td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Other attributes
|
// Other attributes
|
||||||
$parameters = array();
|
$parameters = array();
|
||||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
|
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
|
||||||
@@ -2445,7 +2469,7 @@ if (($action == 'clone' && (empty($conf->use_javascript_ajax) || !empty($conf->d
|
|||||||
// Define confirmation messages
|
// Define confirmation messages
|
||||||
$formquestionclone = array(
|
$formquestionclone = array(
|
||||||
'text' => $langs->trans("ConfirmClone"),
|
'text' => $langs->trans("ConfirmClone"),
|
||||||
array('type' => 'text', 'name' => 'clone_ref', 'label' => $langs->trans("NewRefForClone"), 'value' => empty($tmpcode) ? $langs->trans("CopyOf").' '.$object->ref : $tmpcode, 'size'=>24),
|
array('type' => 'text', 'name' => 'clone_ref', 'label' => $langs->trans("NewRefForClone"), 'value' => empty($tmpcode) ? $langs->trans("CopyOf").' '.$object->ref : $tmpcode, 'morecss'=>'width150'),
|
||||||
array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneContentProduct"), 'value' => 1),
|
array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneContentProduct"), 'value' => 1),
|
||||||
array('type' => 'checkbox', 'name' => 'clone_categories', 'label' => $langs->trans("CloneCategoriesProduct"), 'value' => 1),
|
array('type' => 'checkbox', 'name' => 'clone_categories', 'label' => $langs->trans("CloneCategoriesProduct"), 'value' => 1),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -261,6 +261,13 @@ class Product extends CommonObject
|
|||||||
*/
|
*/
|
||||||
public $finished;
|
public $finished;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fk_default_bom indicates the default bom
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $fk_default_bom;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We must manage lot/batch number, sell-by date and so on : '1':yes '0':no
|
* We must manage lot/batch number, sell-by date and so on : '1':yes '0':no
|
||||||
*
|
*
|
||||||
@@ -1113,6 +1120,7 @@ class Product extends CommonObject
|
|||||||
$sql .= ", batch_mask = '".$this->db->escape($this->batch_mask)."'";
|
$sql .= ", batch_mask = '".$this->db->escape($this->batch_mask)."'";
|
||||||
|
|
||||||
$sql .= ", finished = ".((!isset($this->finished) || $this->finished < 0 || $this->finished == '') ? "null" : (int) $this->finished);
|
$sql .= ", finished = ".((!isset($this->finished) || $this->finished < 0 || $this->finished == '') ? "null" : (int) $this->finished);
|
||||||
|
$sql .= ", fk_default_bom = ".((!isset($this->fk_default_bom) || $this->fk_default_bom < 0 || $this->fk_default_bom == '') ? "null" : (int) $this->fk_default_bom);
|
||||||
$sql .= ", net_measure = ".($this->net_measure != '' ? "'".$this->db->escape($this->net_measure)."'" : 'null');
|
$sql .= ", net_measure = ".($this->net_measure != '' ? "'".$this->db->escape($this->net_measure)."'" : 'null');
|
||||||
$sql .= ", net_measure_units = ".($this->net_measure_units != '' ? "'".$this->db->escape($this->net_measure_units)."'" : 'null');
|
$sql .= ", net_measure_units = ".($this->net_measure_units != '' ? "'".$this->db->escape($this->net_measure_units)."'" : 'null');
|
||||||
$sql .= ", weight = ".($this->weight != '' ? "'".$this->db->escape($this->weight)."'" : 'null');
|
$sql .= ", weight = ".($this->weight != '' ? "'".$this->db->escape($this->weight)."'" : 'null');
|
||||||
@@ -2255,7 +2263,7 @@ class Product extends CommonObject
|
|||||||
$sql .= " p.price_min, p.price_min_ttc, p.price_base_type, p.cost_price, p.default_vat_code, p.tva_tx, p.recuperableonly as tva_npr, p.localtax1_tx, p.localtax2_tx, p.localtax1_type, p.localtax2_type, p.tosell,";
|
$sql .= " p.price_min, p.price_min_ttc, p.price_base_type, p.cost_price, p.default_vat_code, p.tva_tx, p.recuperableonly as tva_npr, p.localtax1_tx, p.localtax2_tx, p.localtax1_type, p.localtax2_type, p.tosell,";
|
||||||
$sql .= " p.tobuy, p.fk_product_type, p.duration, p.fk_default_warehouse, p.seuil_stock_alerte, p.canvas, p.net_measure, p.net_measure_units, p.weight, p.weight_units,";
|
$sql .= " p.tobuy, p.fk_product_type, p.duration, p.fk_default_warehouse, p.seuil_stock_alerte, p.canvas, p.net_measure, p.net_measure_units, p.weight, p.weight_units,";
|
||||||
$sql .= " p.length, p.length_units, p.width, p.width_units, p.height, p.height_units,";
|
$sql .= " p.length, p.length_units, p.width, p.width_units, p.height, p.height_units,";
|
||||||
$sql .= " p.surface, p.surface_units, p.volume, p.volume_units, p.barcode, p.fk_barcode_type, p.finished,p.mandatory_period,";
|
$sql .= " p.surface, p.surface_units, p.volume, p.volume_units, p.barcode, p.fk_barcode_type, p.finished,p.mandatory_period, p.fk_default_bom,";
|
||||||
if (empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED)) {
|
if (empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED)) {
|
||||||
$sql .= " p.accountancy_code_buy, p.accountancy_code_buy_intra, p.accountancy_code_buy_export, p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export,";
|
$sql .= " p.accountancy_code_buy, p.accountancy_code_buy_intra, p.accountancy_code_buy_export, p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export,";
|
||||||
} else {
|
} else {
|
||||||
@@ -2299,6 +2307,7 @@ class Product extends CommonObject
|
|||||||
if ($separatedStock) {
|
if ($separatedStock) {
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product_stock as sp ON sp.fk_product = p.rowid AND sp.fk_entrepot IN (SELECT rowid FROM ".MAIN_DB_PREFIX."entrepot WHERE entity IN (".$this->db->sanitize($visibleWarehousesEntities)."))";
|
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product_stock as sp ON sp.fk_product = p.rowid AND sp.fk_entrepot IN (SELECT rowid FROM ".MAIN_DB_PREFIX."entrepot WHERE entity IN (".$this->db->sanitize($visibleWarehousesEntities)."))";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($id) {
|
if ($id) {
|
||||||
$sql .= " WHERE p.rowid = ".((int) $id);
|
$sql .= " WHERE p.rowid = ".((int) $id);
|
||||||
} else {
|
} else {
|
||||||
@@ -2381,6 +2390,8 @@ class Product extends CommonObject
|
|||||||
$this->localtax2_type = $obj->localtax2_type;
|
$this->localtax2_type = $obj->localtax2_type;
|
||||||
|
|
||||||
$this->finished = $obj->finished;
|
$this->finished = $obj->finished;
|
||||||
|
$this->fk_default_bom = $obj->fk_default_bom;
|
||||||
|
|
||||||
$this->duration = $obj->duration;
|
$this->duration = $obj->duration;
|
||||||
$this->duration_value = substr($obj->duration, 0, dol_strlen($obj->duration) - 1);
|
$this->duration_value = substr($obj->duration, 0, dol_strlen($obj->duration) - 1);
|
||||||
$this->duration_unit = substr($obj->duration, -1);
|
$this->duration_unit = substr($obj->duration, -1);
|
||||||
|
|||||||
@@ -103,6 +103,9 @@ if ($id > 0 || $ref) {
|
|||||||
$object->fetch($id, $ref);
|
$object->fetch($id, $ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$usercanread = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->lire) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->lire));
|
||||||
|
$usercancreate = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer));
|
||||||
|
|
||||||
if ($object->id > 0) {
|
if ($object->id > 0) {
|
||||||
if ($object->type == $object::TYPE_PRODUCT) {
|
if ($object->type == $object::TYPE_PRODUCT) {
|
||||||
restrictedArea($user, 'produit', $object->id, 'product&product', '', '');
|
restrictedArea($user, 'produit', $object->id, 'product&product', '', '');
|
||||||
@@ -123,9 +126,6 @@ if ($cancel) {
|
|||||||
$action = '';
|
$action = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$usercanread = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->lire) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->lire));
|
|
||||||
$usercancreate = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer));
|
|
||||||
|
|
||||||
$parameters = array('socid'=>$socid, 'id_prod'=>$id);
|
$parameters = array('socid'=>$socid, 'id_prod'=>$id);
|
||||||
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
if ($reshook < 0) {
|
if ($reshook < 0) {
|
||||||
@@ -404,13 +404,23 @@ if ($id > 0 || $ref) {
|
|||||||
print '<div class="underbanner clearboth"></div>';
|
print '<div class="underbanner clearboth"></div>';
|
||||||
print '<table class="border tableforfield centpercent">';
|
print '<table class="border tableforfield centpercent">';
|
||||||
|
|
||||||
|
// Type
|
||||||
|
if (!empty($conf->product->enabled) && !empty($conf->service->enabled)) {
|
||||||
|
$typeformat = 'select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service");
|
||||||
|
print '<tr><td class="">';
|
||||||
|
print (empty($conf->global->PRODUCT_DENY_CHANGE_PRODUCT_TYPE)) ? $form->editfieldkey("Type", 'fk_product_type', $object->type, $object, 0, $typeformat) : $langs->trans('Type');
|
||||||
|
print '</td><td>';
|
||||||
|
print $form->editfieldval("Type", 'fk_product_type', $object->type, $object, 0, $typeformat);
|
||||||
|
print '</td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
// Cost price. Can be used for margin module for option "calculate margin on explicit cost price
|
// Cost price. Can be used for margin module for option "calculate margin on explicit cost price
|
||||||
print '<tr><td>';
|
print '<tr><td>';
|
||||||
$textdesc = $langs->trans("CostPriceDescription");
|
$textdesc = $langs->trans("CostPriceDescription");
|
||||||
$textdesc .= "<br>".$langs->trans("CostPriceUsage");
|
$textdesc .= "<br>".$langs->trans("CostPriceUsage");
|
||||||
$text = $form->textwithpicto($langs->trans("CostPrice"), $textdesc, 1, 'help', '');
|
$text = $form->textwithpicto($langs->trans("CostPrice"), $textdesc, 1, 'help', '');
|
||||||
print $form->editfieldkey($text, 'cost_price', $object->cost_price, $object, $usercancreate, 'amount:6');
|
print $form->editfieldkey($text, 'cost_price', $object->cost_price, $object, $usercancreate, 'amount:6');
|
||||||
print '</td><td colspan="2">';
|
print '</td><td>';
|
||||||
print $form->editfieldval($text, 'cost_price', $object->cost_price, $object, $usercancreate, 'amount:6');
|
print $form->editfieldval($text, 'cost_price', $object->cost_price, $object, $usercancreate, 'amount:6');
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
@@ -425,7 +435,7 @@ if ($id > 0 || $ref) {
|
|||||||
|
|
||||||
// Best buying Price
|
// Best buying Price
|
||||||
print '<tr><td class="titlefieldcreate">'.$langs->trans("BuyingPriceMin").'</td>';
|
print '<tr><td class="titlefieldcreate">'.$langs->trans("BuyingPriceMin").'</td>';
|
||||||
print '<td colspan="2">';
|
print '<td>';
|
||||||
$product_fourn = new ProductFournisseur($db);
|
$product_fourn = new ProductFournisseur($db);
|
||||||
if ($product_fourn->find_min_price_product_fournisseur($object->id) > 0) {
|
if ($product_fourn->find_min_price_product_fournisseur($object->id) > 0) {
|
||||||
if ($product_fourn->product_fourn_price_id > 0) {
|
if ($product_fourn->product_fourn_price_id > 0) {
|
||||||
|
|||||||
@@ -717,8 +717,18 @@ if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_
|
|||||||
$soc->id = $socid;
|
$soc->id = $socid;
|
||||||
$soc->fetch($socid);
|
$soc->fetch($socid);
|
||||||
|
|
||||||
|
// Type
|
||||||
|
if (!empty($conf->product->enabled) && !empty($conf->service->enabled)) {
|
||||||
|
$typeformat = 'select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service");
|
||||||
|
print '<tr><td class="">';
|
||||||
|
print (empty($conf->global->PRODUCT_DENY_CHANGE_PRODUCT_TYPE)) ? $form->editfieldkey("Type", 'fk_product_type', $object->type, $object, 0, $typeformat) : $langs->trans('Type');
|
||||||
|
print '</td><td>';
|
||||||
|
print $form->editfieldval("Type", 'fk_product_type', $object->type, $object, 0, $typeformat);
|
||||||
|
print '</td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
// Selling price
|
// Selling price
|
||||||
print '<tr><td class="titlefield">';
|
print '<tr><td class="titlefieldcreate">';
|
||||||
print $langs->trans("SellingPrice");
|
print $langs->trans("SellingPrice");
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td colspan="2">';
|
print '<td colspan="2">';
|
||||||
@@ -791,13 +801,33 @@ if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) { // using this option is a bug. kept for backward compatibility
|
if (!empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) { // using this option is a bug. kept for backward compatibility
|
||||||
|
// Type
|
||||||
|
if (!empty($conf->product->enabled) && !empty($conf->service->enabled)) {
|
||||||
|
$typeformat = 'select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service");
|
||||||
|
print '<tr><td class="">';
|
||||||
|
print (empty($conf->global->PRODUCT_DENY_CHANGE_PRODUCT_TYPE)) ? $form->editfieldkey("Type", 'fk_product_type', $object->type, $object, 0, $typeformat) : $langs->trans('Type');
|
||||||
|
print '</td><td>';
|
||||||
|
print $form->editfieldval("Type", 'fk_product_type', $object->type, $object, 0, $typeformat);
|
||||||
|
print '</td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
// We show only vat for level 1
|
// We show only vat for level 1
|
||||||
print '<tr><td class="titlefield">'.$langs->trans("DefaultTaxRate").'</td>';
|
print '<tr><td class="titlefieldcreate">'.$langs->trans("DefaultTaxRate").'</td>';
|
||||||
print '<td colspan="2">'.vatrate($object->multiprices_tva_tx[1], true).'</td>';
|
print '<td colspan="2">'.vatrate($object->multiprices_tva_tx[1], true).'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
} else {
|
} else {
|
||||||
|
// Type
|
||||||
|
if (!empty($conf->product->enabled) && !empty($conf->service->enabled)) {
|
||||||
|
$typeformat = 'select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service");
|
||||||
|
print '<tr><td class="">';
|
||||||
|
print (empty($conf->global->PRODUCT_DENY_CHANGE_PRODUCT_TYPE)) ? $form->editfieldkey("Type", 'fk_product_type', $object->type, $object, 0, $typeformat) : $langs->trans('Type');
|
||||||
|
print '</td><td>';
|
||||||
|
print $form->editfieldval("Type", 'fk_product_type', $object->type, $object, 0, $typeformat);
|
||||||
|
print '</td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
// TVA
|
// TVA
|
||||||
print '<tr><td class="titlefield">'.$langs->trans("DefaultTaxRate").'</td><td>';
|
print '<tr><td class="titlefieldcreate">'.$langs->trans("DefaultTaxRate").'</td><td>';
|
||||||
|
|
||||||
$positiverates = '';
|
$positiverates = '';
|
||||||
if (price2num($object->tva_tx)) {
|
if (price2num($object->tva_tx)) {
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ $batchnumber = GETPOST('batch_number', 'san_alpha');
|
|||||||
if (!empty($batchnumber)) {
|
if (!empty($batchnumber)) {
|
||||||
$batchnumber = trim($batchnumber);
|
$batchnumber = trim($batchnumber);
|
||||||
}
|
}
|
||||||
|
$cost_price = GETPOST('cost_price', 'alpha');
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
if ($user->socid) {
|
if ($user->socid) {
|
||||||
@@ -113,6 +114,9 @@ $hookmanager->initHooks(array('stockproductcard', 'globalcard'));
|
|||||||
|
|
||||||
$error = 0;
|
$error = 0;
|
||||||
|
|
||||||
|
$usercanread = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->lire) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->lire));
|
||||||
|
$usercancreate = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer));
|
||||||
|
|
||||||
if ($object->id > 0) {
|
if ($object->id > 0) {
|
||||||
if ($object->type == $object::TYPE_PRODUCT) {
|
if ($object->type == $object::TYPE_PRODUCT) {
|
||||||
restrictedArea($user, 'produit', $object->id, 'product&product', '', '');
|
restrictedArea($user, 'produit', $object->id, 'product&product', '', '');
|
||||||
@@ -139,6 +143,21 @@ if ($reshook < 0) {
|
|||||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($action == 'setcost_price') {
|
||||||
|
if ($id) {
|
||||||
|
$result = $object->fetch($id);
|
||||||
|
$object->cost_price = price2num($cost_price);
|
||||||
|
$result = $object->update($object->id, $user);
|
||||||
|
if ($result > 0) {
|
||||||
|
setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
|
||||||
|
$action = '';
|
||||||
|
} else {
|
||||||
|
$error++;
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($action == 'addlimitstockwarehouse' && !empty($user->rights->produit->creer)) {
|
if ($action == 'addlimitstockwarehouse' && !empty($user->rights->produit->creer)) {
|
||||||
$seuil_stock_alerte = GETPOST('seuil_stock_alerte');
|
$seuil_stock_alerte = GETPOST('seuil_stock_alerte');
|
||||||
$desiredstock = GETPOST('desiredstock');
|
$desiredstock = GETPOST('desiredstock');
|
||||||
@@ -600,9 +619,9 @@ if ($id > 0 || $ref) {
|
|||||||
if (!empty($conf->product->enabled) && !empty($conf->service->enabled)) {
|
if (!empty($conf->product->enabled) && !empty($conf->service->enabled)) {
|
||||||
$typeformat = 'select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service");
|
$typeformat = 'select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service");
|
||||||
print '<tr><td class="">';
|
print '<tr><td class="">';
|
||||||
print (empty($conf->global->PRODUCT_DENY_CHANGE_PRODUCT_TYPE)) ? $form->editfieldkey("Type", 'fk_product_type', $object->type, $object, $usercancreate, $typeformat) : $langs->trans('Type');
|
print (empty($conf->global->PRODUCT_DENY_CHANGE_PRODUCT_TYPE)) ? $form->editfieldkey("Type", 'fk_product_type', $object->type, $object, 0, $typeformat) : $langs->trans('Type');
|
||||||
print '</td><td>';
|
print '</td><td>';
|
||||||
print $form->editfieldval("Type", 'fk_product_type', $object->type, $object, $usercancreate, $typeformat);
|
print $form->editfieldval("Type", 'fk_product_type', $object->type, $object, 0, $typeformat);
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -618,7 +637,7 @@ if ($id > 0 || $ref) {
|
|||||||
$textdesc .= "<br>".$langs->trans("CostPriceUsage");
|
$textdesc .= "<br>".$langs->trans("CostPriceUsage");
|
||||||
$text = $form->textwithpicto($langs->trans("CostPrice"), $textdesc, 1, 'help', '');
|
$text = $form->textwithpicto($langs->trans("CostPrice"), $textdesc, 1, 'help', '');
|
||||||
print $form->editfieldkey($text, 'cost_price', $object->cost_price, $object, $usercancreate, 'amount:6');
|
print $form->editfieldkey($text, 'cost_price', $object->cost_price, $object, $usercancreate, 'amount:6');
|
||||||
print '</td><td colspan="2">';
|
print '</td><td>';
|
||||||
print $form->editfieldval($text, 'cost_price', $object->cost_price, $object, $usercancreate, 'amount:6');
|
print $form->editfieldval($text, 'cost_price', $object->cost_price, $object, $usercancreate, 'amount:6');
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
|
|||||||
@@ -729,7 +729,7 @@ if ($id) {
|
|||||||
if ($action == 'edit') {
|
if ($action == 'edit') {
|
||||||
print '<tr><td class="fieldrequired">' . $langs->trans("Amount") . '</td><td><input name="amount" size="10" value="' . price($object->amount) . '"></td></tr>';
|
print '<tr><td class="fieldrequired">' . $langs->trans("Amount") . '</td><td><input name="amount" size="10" value="' . price($object->amount) . '"></td></tr>';
|
||||||
} else {
|
} else {
|
||||||
print '<tr><td>' . $langs->trans("Amount") . '</td><td>' . price($object->amount, 0, $outputlangs, 1, -1, -1, $conf->currency) . '</td></tr>';
|
print '<tr><td>' . $langs->trans("Amount") . '</td><td><span class="amount">' . price($object->amount, 0, $langs, 1, -1, -1, $conf->currency) . '</span></td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default mode of payment
|
// Default mode of payment
|
||||||
|
|||||||
@@ -877,7 +877,7 @@ if ($resql) {
|
|||||||
// Thirdparty
|
// Thirdparty
|
||||||
if (!empty($arrayfields['s.nom']['checked'])) {
|
if (!empty($arrayfields['s.nom']['checked'])) {
|
||||||
print '<td class="tdoverflowmax200">';
|
print '<td class="tdoverflowmax200">';
|
||||||
print $companystatic->getNomUrl(1, 'customer');
|
print $companystatic->getNomUrl(1, 'supplier');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
if (!$i) {
|
if (!$i) {
|
||||||
$totalarray['nbfield']++;
|
$totalarray['nbfield']++;
|
||||||
|
|||||||
@@ -254,6 +254,14 @@ if ($conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector" && filter_var($con
|
|||||||
print "</td></tr>\n";
|
print "</td></tr>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector" && filter_var($conf->global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true) {
|
||||||
|
print '<tr class="oddeven"><td>';
|
||||||
|
print $langs->trans('CustomerDisplay');
|
||||||
|
print '<td colspan="2">';
|
||||||
|
print ajax_constantonoff("TAKEPOS_CUSTOMER_DISPLAY", array(), $conf->entity, 0, 0, 1, 0);
|
||||||
|
print "</td></tr>\n";
|
||||||
|
}
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ function ClickProduct(position) {
|
|||||||
if (idproduct=="") return;
|
if (idproduct=="") return;
|
||||||
// Call page invoice.php to generate the section with product lines
|
// Call page invoice.php to generate the section with product lines
|
||||||
$("#poslines").load("invoice.php?action=addline&place="+place+"&idproduct="+idproduct+"&selectedline="+selectedline, function() {
|
$("#poslines").load("invoice.php?action=addline&place="+place+"&idproduct="+idproduct+"&selectedline="+selectedline, function() {
|
||||||
//$('#poslines').scrollTop($('#poslines')[0].scrollHeight);
|
<?php if (!empty($conf->global->TAKEPOS_CUSTOMER_DISPLAY)) echo "CustomerDisplay();";?>
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -550,6 +550,10 @@ if ($action == "addline") {
|
|||||||
if ($idoflineadded <= 0) {
|
if ($idoflineadded <= 0) {
|
||||||
$invoice->fetch_thirdparty();
|
$invoice->fetch_thirdparty();
|
||||||
$idoflineadded = $invoice->addline($prod->description, $price, 1, $tva_tx, $localtax1_tx, $localtax2_tx, $idproduct, $customer->remise_percent, '', 0, 0, 0, '', $price_base_type, $price_ttc, $prod->type, -1, 0, '', 0, $parent_line, null, '', '', 0, 100, '', null, 0);
|
$idoflineadded = $invoice->addline($prod->description, $price, 1, $tva_tx, $localtax1_tx, $localtax2_tx, $idproduct, $customer->remise_percent, '', 0, 0, 0, '', $price_base_type, $price_ttc, $prod->type, -1, 0, '', 0, $parent_line, null, '', '', 0, 100, '', null, 0);
|
||||||
|
if (!empty($conf->global->TAKEPOS_CUSTOMER_DISPLAY)) {
|
||||||
|
$CUSTOMER_DISPLAY_line1 = $prod->label;
|
||||||
|
$CUSTOMER_DISPLAY_line2 = price($price_ttc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$invoice->fetch($placeid);
|
$invoice->fetch($placeid);
|
||||||
@@ -1176,6 +1180,23 @@ $( document ).ready(function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
<?php
|
||||||
|
if (!empty($conf->global->TAKEPOS_CUSTOMER_DISPLAY)) {
|
||||||
|
echo "function CustomerDisplay(){";
|
||||||
|
echo "var line1='".$CUSTOMER_DISPLAY_line1."'.substring(0,20);";
|
||||||
|
echo "line1=line1.padEnd(20);";
|
||||||
|
echo "var line2='".$CUSTOMER_DISPLAY_line2."'.substring(0,20);";
|
||||||
|
echo "line2=line2.padEnd(20);";
|
||||||
|
echo "$.ajax({
|
||||||
|
type: 'GET',
|
||||||
|
data: { text: line1+line2 },
|
||||||
|
url: '".getDolGlobalString('TAKEPOS_PRINT_SERVER')."/display/index.php',
|
||||||
|
});";
|
||||||
|
echo "}";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|||||||
@@ -255,6 +255,20 @@ if ($conf->global->TAKEPOS_NUMPAD == 0) {
|
|||||||
});
|
});
|
||||||
}, 2500);
|
}, 2500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<?php
|
||||||
|
if (!empty($conf->global->TAKEPOS_CUSTOMER_DISPLAY)) {
|
||||||
|
echo "var line1='".$langs->trans('TotalTTC')."'.substring(0,20);";
|
||||||
|
echo "line1=line1.padEnd(20);";
|
||||||
|
echo "var line2='".price($invoice->total_ttc, 1, '', 1, -1, -1)."'.substring(0,20);";
|
||||||
|
echo "line2=line2.padEnd(20);";
|
||||||
|
echo "$.ajax({
|
||||||
|
type: 'GET',
|
||||||
|
data: { text: line1+line2 },
|
||||||
|
url: '".getDolGlobalString('TAKEPOS_PRINT_SERVER')."/display/index.php',
|
||||||
|
});";
|
||||||
|
}
|
||||||
|
?>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div style="position:relative; padding-top: 20px; left:5%; height:150px; width:90%;">
|
<div style="position:relative; padding-top: 20px; left:5%; height:150px; width:90%;">
|
||||||
|
|||||||
@@ -647,6 +647,9 @@ textarea.centpercent {
|
|||||||
.large {
|
.large {
|
||||||
font-size: 125%;
|
font-size: 125%;
|
||||||
}
|
}
|
||||||
|
.double {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
.h1 .small, .h1 small, .h2 .small, .h2 small, .h3 .small, .h3 small, h1 .small, h1 small, h2 .small, h2 small, h3 .small, h3 small {
|
.h1 .small, .h1 small, .h2 .small, .h2 small, .h3 .small, .h3 small, h1 .small, h1 small, h2 .small, h2 small, h3 .small, h3 small {
|
||||||
font-size: 65%;
|
font-size: 65%;
|
||||||
@@ -736,6 +739,9 @@ textarea.centpercent {
|
|||||||
.paddingleft2 {
|
.paddingleft2 {
|
||||||
padding-<?php print $left; ?>: 2px;
|
padding-<?php print $left; ?>: 2px;
|
||||||
}
|
}
|
||||||
|
.paddingleft2imp {
|
||||||
|
padding-<?php print $left; ?>: 2px !important;
|
||||||
|
}
|
||||||
.paddingright {
|
.paddingright {
|
||||||
padding-<?php print $right; ?>: 4px;
|
padding-<?php print $right; ?>: 4px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -878,12 +878,18 @@ textarea.centpercent {
|
|||||||
.paddingleft2 {
|
.paddingleft2 {
|
||||||
padding-<?php print $left; ?>: 2px;
|
padding-<?php print $left; ?>: 2px;
|
||||||
}
|
}
|
||||||
|
.paddingleft2imp {
|
||||||
|
padding-<?php print $left; ?>: 2px !important;
|
||||||
|
}
|
||||||
.paddingright {
|
.paddingright {
|
||||||
padding-<?php print $right; ?>: 4px;
|
padding-<?php print $right; ?>: 4px;
|
||||||
}
|
}
|
||||||
.paddingright2 {
|
.paddingright2 {
|
||||||
padding-<?php print $right; ?>: 2px;
|
padding-<?php print $right; ?>: 2px;
|
||||||
}
|
}
|
||||||
|
.paddingright2imp {
|
||||||
|
padding-<?php print $right; ?>: 2px !important;
|
||||||
|
}
|
||||||
.marginleft2 {
|
.marginleft2 {
|
||||||
margin-<?php print $left; ?>: 2px;
|
margin-<?php print $left; ?>: 2px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,9 +22,13 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \file htdocs/user/group/perms.php
|
* \file htdocs/user/group/perms.php
|
||||||
* \brief Onglet user et permissions de la fiche utilisateur
|
* \brief Page to set permissions of a user group record
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (!defined('CSRFCHECK_WITH_TOKEN')) {
|
||||||
|
define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET
|
||||||
|
}
|
||||||
|
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
|
||||||
@@ -41,6 +45,10 @@ $module = GETPOST('module', 'alpha');
|
|||||||
$rights = GETPOST('rights', 'int');
|
$rights = GETPOST('rights', 'int');
|
||||||
$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'groupperms'; // To manage different context of search
|
$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'groupperms'; // To manage different context of search
|
||||||
|
|
||||||
|
if (!isset($id) || empty($id)) {
|
||||||
|
accessforbidden();
|
||||||
|
}
|
||||||
|
|
||||||
// Define if user can read permissions
|
// Define if user can read permissions
|
||||||
$canreadperms = ($user->admin || $user->rights->user->user->lire);
|
$canreadperms = ($user->admin || $user->rights->user->user->lire);
|
||||||
// Define if user can modify group permissions
|
// Define if user can modify group permissions
|
||||||
@@ -53,12 +61,15 @@ if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS)) {
|
|||||||
$caneditperms = ($user->admin || $user->rights->user->group_advance->write);
|
$caneditperms = ($user->admin || $user->rights->user->group_advance->write);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Security check
|
||||||
|
//$result = restrictedArea($user, 'user', $id, 'usergroup', '');
|
||||||
if (!$canreadperms) {
|
if (!$canreadperms) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
$object = new Usergroup($db);
|
$object = new Usergroup($db);
|
||||||
$object->fetch($id);
|
$object->fetch($id);
|
||||||
|
$object->getrights();
|
||||||
|
|
||||||
$entity = $conf->entity;
|
$entity = $conf->entity;
|
||||||
|
|
||||||
@@ -79,7 +90,7 @@ if ($reshook < 0) {
|
|||||||
if (empty($reshook)) {
|
if (empty($reshook)) {
|
||||||
if ($action == 'addrights' && $caneditperms) {
|
if ($action == 'addrights' && $caneditperms) {
|
||||||
$editgroup = new Usergroup($db);
|
$editgroup = new Usergroup($db);
|
||||||
$result = $editgroup->fetch($id);
|
$result = $editgroup->fetch($object->id);
|
||||||
if ($result > 0) {
|
if ($result > 0) {
|
||||||
$result = $editgroup->addrights($rights, $module, '', $entity);
|
$result = $editgroup->addrights($rights, $module, '', $entity);
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
@@ -88,6 +99,9 @@ if (empty($reshook)) {
|
|||||||
} else {
|
} else {
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$user->clearrights();
|
||||||
|
$user->getrights();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'delrights' && $caneditperms) {
|
if ($action == 'delrights' && $caneditperms) {
|
||||||
@@ -101,11 +115,14 @@ if (empty($reshook)) {
|
|||||||
} else {
|
} else {
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$user->clearrights();
|
||||||
|
$user->getrights();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* View
|
* View
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -114,11 +131,6 @@ $form = new Form($db);
|
|||||||
llxHeader('', $langs->trans("Permissions"));
|
llxHeader('', $langs->trans("Permissions"));
|
||||||
|
|
||||||
if ($object->id > 0) {
|
if ($object->id > 0) {
|
||||||
/*
|
|
||||||
* Affichage onglets
|
|
||||||
*/
|
|
||||||
$object->getrights(); // Reload permission
|
|
||||||
|
|
||||||
$head = group_prepare_head($object);
|
$head = group_prepare_head($object);
|
||||||
$title = $langs->trans("Group");
|
$title = $langs->trans("Group");
|
||||||
print dol_get_fiche_head($head, 'rights', $title, -1, 'group');
|
print dol_get_fiche_head($head, 'rights', $title, -1, 'group');
|
||||||
@@ -165,8 +177,8 @@ if ($object->id > 0) {
|
|||||||
$sql .= " FROM ".MAIN_DB_PREFIX."rights_def as r,";
|
$sql .= " FROM ".MAIN_DB_PREFIX."rights_def as r,";
|
||||||
$sql .= " ".MAIN_DB_PREFIX."usergroup_rights as gr";
|
$sql .= " ".MAIN_DB_PREFIX."usergroup_rights as gr";
|
||||||
$sql .= " WHERE gr.fk_id = r.id";
|
$sql .= " WHERE gr.fk_id = r.id";
|
||||||
$sql .= " AND gr.entity = ".$entity;
|
$sql .= " AND gr.entity = ".((int) $entity);
|
||||||
$sql .= " AND gr.fk_usergroup = ".$object->id;
|
$sql .= " AND gr.fk_usergroup = ".((int) $object->id);
|
||||||
|
|
||||||
dol_syslog("get user perms", LOG_DEBUG);
|
dol_syslog("get user perms", LOG_DEBUG);
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
@@ -186,6 +198,10 @@ if ($object->id > 0) {
|
|||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Part to add/remove permissions
|
||||||
|
*/
|
||||||
|
|
||||||
$linkback = '<a href="'.DOL_URL_ROOT.'/user/group/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
|
$linkback = '<a href="'.DOL_URL_ROOT.'/user/group/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
|
||||||
|
|
||||||
dol_banner_tab($object, 'id', $linkback, $user->rights->user->user->lire || $user->admin);
|
dol_banner_tab($object, 'id', $linkback, $user->rights->user->user->lire || $user->admin);
|
||||||
@@ -193,9 +209,6 @@ if ($object->id > 0) {
|
|||||||
print '<div class="fichecenter">';
|
print '<div class="fichecenter">';
|
||||||
print '<div class="underbanner clearboth"></div>';
|
print '<div class="underbanner clearboth"></div>';
|
||||||
|
|
||||||
/*
|
|
||||||
* Ecran ajout/suppression permission
|
|
||||||
*/
|
|
||||||
|
|
||||||
print '<table class="border centpercent tableforfield">';
|
print '<table class="border centpercent tableforfield">';
|
||||||
|
|
||||||
@@ -235,26 +248,26 @@ if ($object->id > 0) {
|
|||||||
print '<td>'.$langs->trans("Module").'</td>';
|
print '<td>'.$langs->trans("Module").'</td>';
|
||||||
if ($caneditperms) {
|
if ($caneditperms) {
|
||||||
print '<td class="center nowrap">';
|
print '<td class="center nowrap">';
|
||||||
print '<a class="reposition commonlink" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.dol_escape_htmltag($langs->trans("All")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addrights&entity='.$entity.'&module=allmodules&token='.newToken().'">'.$langs->trans("All")."</a>";
|
print '<a class="reposition commonlink" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.dol_escape_htmltag($langs->trans("All")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addrights&entity='.$entity.'&module=allmodules&confirm=yes&token='.newToken().'">'.$langs->trans("All")."</a>";
|
||||||
print '/';
|
print '/';
|
||||||
print '<a class="reposition commonlink" title="'.dol_escape_htmltag($langs->trans("None")).'" alt="'.dol_escape_htmltag($langs->trans("None")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delrights&entity='.$entity.'&module=allmodules&token='.newToken().'">'.$langs->trans("None")."</a>";
|
print '<a class="reposition commonlink" title="'.dol_escape_htmltag($langs->trans("None")).'" alt="'.dol_escape_htmltag($langs->trans("None")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delrights&entity='.$entity.'&module=allmodules&confirm=yes&token='.newToken().'">'.$langs->trans("None")."</a>";
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
print '<td class="center" width="24"> </td>';
|
print '<td class="center" width="24"> </td>';
|
||||||
print '<td>'.$langs->trans("Permissions").'</td>';
|
print '<td>'.$langs->trans("Permissions").'</td>';
|
||||||
if ($user->admin) {
|
if ($user->admin) {
|
||||||
print '<td class="right">'.$langs->trans("ID").'</td>';
|
print '<td class="right"></td>';
|
||||||
}
|
}
|
||||||
print '</tr>'."\n";
|
print '</tr>'."\n";
|
||||||
|
|
||||||
$sql = "SELECT r.id, r.libelle as label, r.module";
|
$sql = "SELECT r.id, r.libelle as label, r.module, r.perms, r.subperms, r.module_position, r.bydefault";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."rights_def as r";
|
$sql .= " FROM ".MAIN_DB_PREFIX."rights_def as r";
|
||||||
$sql .= " WHERE r.libelle NOT LIKE 'tou%'"; // On ignore droits "tous"
|
$sql .= " WHERE r.libelle NOT LIKE 'tou%'"; // On ignore droits "tous"
|
||||||
$sql .= " AND r.entity = ".$entity;
|
$sql .= " AND r.entity = ".((int) $entity);
|
||||||
if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) {
|
if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) {
|
||||||
$sql .= " AND r.perms NOT LIKE '%_advance'"; // Hide advanced perms if option is disable
|
$sql .= " AND r.perms NOT LIKE '%_advance'"; // Hide advanced perms if option is disable
|
||||||
}
|
}
|
||||||
$sql .= " ORDER BY r.module, r.id";
|
$sql .= " ORDER BY r.family_position, r.module_position, r.module, r.id";
|
||||||
|
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
if ($result) {
|
if ($result) {
|
||||||
@@ -265,13 +278,16 @@ if ($object->id > 0) {
|
|||||||
while ($i < $num) {
|
while ($i < $num) {
|
||||||
$obj = $db->fetch_object($result);
|
$obj = $db->fetch_object($result);
|
||||||
|
|
||||||
// If line is for a module that doe snot existe anymore (absent of includes/module), we ignore it
|
// If line is for a module that does not exist anymore (absent of includes/module), we ignore it
|
||||||
if (empty($modules[$obj->module])) {
|
if (empty($modules[$obj->module])) {
|
||||||
$i++;
|
$i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($oldmod <> $obj->module) {
|
$objMod = $modules[$obj->module];
|
||||||
|
|
||||||
|
// Break found, it's a new module to catch
|
||||||
|
if (isset($obj->module) && ($oldmod <> $obj->module)) {
|
||||||
$oldmod = $obj->module;
|
$oldmod = $obj->module;
|
||||||
|
|
||||||
// Break detected, we get objMod
|
// Break detected, we get objMod
|
||||||
@@ -286,21 +302,22 @@ if ($object->id > 0) {
|
|||||||
print '</td>';
|
print '</td>';
|
||||||
if ($caneditperms) {
|
if ($caneditperms) {
|
||||||
print '<td class="center nowrap">';
|
print '<td class="center nowrap">';
|
||||||
print '<a class="reposition" title='.$langs->trans("All").' alt='.$langs->trans("All").' href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addrights&entity='.$entity.'&module='.$obj->module.'&token='.newToken().'">'.$langs->trans("All")."</a>";
|
print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.$langs->trans("All").'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addrights&entity='.$entity.'&module='.$obj->module.'&token='.newToken().'">'.$langs->trans("All")."</a>";
|
||||||
print '/';
|
print '/';
|
||||||
print '<a class="reposition" title='.$langs->trans("None").' alt='.$langs->trans("None").' href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delrights&entity='.$entity.'&module='.$obj->module.'&token='.newToken().'">'.$langs->trans("None")."</a>";
|
print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("None")).'" alt="'.$langs->trans("None").'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delrights&entity='.$entity.'&module='.$obj->module.'&token='.newToken().'">'.$langs->trans("None")."</a>";
|
||||||
print '</td>';
|
print '</td>';
|
||||||
} else {
|
} else {
|
||||||
print '<td> </td>';
|
print '<td> </td>';
|
||||||
}
|
}
|
||||||
print '<td colspan="2"> </td>';
|
print '<td> </td>';
|
||||||
|
print '<td> </td>';
|
||||||
|
|
||||||
// Permission id
|
// Permission id
|
||||||
if ($user->admin) {
|
if ($user->admin) {
|
||||||
print '<td class="right"></td>';
|
print '<td class="right"></td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print '</tr>';
|
print '</tr>'."\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<!-- '.$obj->module.'->'.$obj->perms.($obj->subperms ? '->'.$obj->subperms : '').' -->'."\n";
|
print '<!-- '.$obj->module.'->'.$obj->perms.($obj->subperms ? '->'.$obj->subperms : '').' -->'."\n";
|
||||||
@@ -315,7 +332,7 @@ if ($object->id > 0) {
|
|||||||
if (in_array($obj->id, $permsgroupbyentity[$entity])) {
|
if (in_array($obj->id, $permsgroupbyentity[$entity])) {
|
||||||
// Own permission by group
|
// Own permission by group
|
||||||
if ($caneditperms) {
|
if ($caneditperms) {
|
||||||
print '<td class="center"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delrights&entity='.$entity.'&rights='.$obj->id.'">';
|
print '<td class="center"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delrights&entity='.$entity.'&rights='.$obj->id.'&confirm=yes&token='.newToken().'">';
|
||||||
//print img_edit_remove($langs->trans("Remove"));
|
//print img_edit_remove($langs->trans("Remove"));
|
||||||
print img_picto($langs->trans("Remove"), 'switch_on');
|
print img_picto($langs->trans("Remove"), 'switch_on');
|
||||||
print '</a></td>';
|
print '</a></td>';
|
||||||
@@ -326,7 +343,7 @@ if ($object->id > 0) {
|
|||||||
} else {
|
} else {
|
||||||
// Do not own permission
|
// Do not own permission
|
||||||
if ($caneditperms) {
|
if ($caneditperms) {
|
||||||
print '<td class="center"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addrights&entity='.$entity.'&rights='.$obj->id.'&token='.newToken().'">';
|
print '<td class="center"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addrights&entity='.$entity.'&rights='.$obj->id.'&confirm=yes&token='.newToken().'">';
|
||||||
//print img_edit_add($langs->trans("Add"));
|
//print img_edit_add($langs->trans("Add"));
|
||||||
print img_picto($langs->trans("Add"), 'switch_off');
|
print img_picto($langs->trans("Add"), 'switch_off');
|
||||||
print '</a></td>';
|
print '</a></td>';
|
||||||
@@ -336,7 +353,7 @@ if ($object->id > 0) {
|
|||||||
} else {
|
} else {
|
||||||
// Do not own permission
|
// Do not own permission
|
||||||
if ($caneditperms) {
|
if ($caneditperms) {
|
||||||
print '<td class="center"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addrights&entity='.$entity.'&rights='.$obj->id.'&token='.newToken().'">';
|
print '<td class="center"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addrights&entity='.$entity.'&rights='.$obj->id.'&confirm=yes&token='.newToken().'">';
|
||||||
//print img_edit_add($langs->trans("Add"));
|
//print img_edit_add($langs->trans("Add"));
|
||||||
print img_picto($langs->trans("Add"), 'switch_off');
|
print img_picto($langs->trans("Add"), 'switch_off');
|
||||||
print '</a></td>';
|
print '</a></td>';
|
||||||
@@ -344,12 +361,25 @@ if ($object->id > 0) {
|
|||||||
print '<td> </td>';
|
print '<td> </td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$permlabel = ($conf->global->MAIN_USE_ADVANCED_PERMS && ($langs->trans("PermissionAdvanced".$obj->id) != ("PermissionAdvanced".$obj->id)) ? $langs->trans("PermissionAdvanced".$obj->id) : (($langs->trans("Permission".$obj->id) != ("Permission".$obj->id)) ? $langs->trans("Permission".$obj->id) : $langs->trans($obj->label)));
|
// Description of permission
|
||||||
print '<td class="maxwidthonsmartphone">'.$permlabel.'</td>';
|
$permlabel = (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ($langs->trans("PermissionAdvanced".$obj->id) != ("PermissionAdvanced".$obj->id)) ? $langs->trans("PermissionAdvanced".$obj->id) : (($langs->trans("Permission".$obj->id) != ("Permission".$obj->id)) ? $langs->trans("Permission".$obj->id) : $langs->trans($obj->label)));
|
||||||
|
print '<td>';
|
||||||
|
print $permlabel;
|
||||||
|
if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS)) {
|
||||||
|
if (preg_match('/_advance$/', $obj->perms)) {
|
||||||
|
print ' <span class="opacitymedium">('.$langs->trans("AdvancedModeOnly").')</span>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
// Permission id
|
// Permission id
|
||||||
if ($user->admin) {
|
if ($user->admin) {
|
||||||
print '<td class="right"><span class="opacitymedium">'.$obj->id.'</span></td>';
|
print '<td class="right">';
|
||||||
|
$htmltext = $langs->trans("ID").': '.$obj->id;
|
||||||
|
$htmltext .= '<br>'.$langs->trans("Permission").': user->rights->'.$obj->module.'->'.$obj->perms.($obj->subperms ? '->'.$obj->subperms : '');
|
||||||
|
print $form->textwithpicto('', $htmltext);
|
||||||
|
//print '<span class="opacitymedium">'.$obj->id.'</span>';
|
||||||
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print '</tr>'."\n";
|
print '</tr>'."\n";
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ $hookmanager->initHooks(array('usercard', 'userperms', 'globalcard'));
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$parameters = array('id'=>$socid);
|
$parameters = array('socid'=>$socid);
|
||||||
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
if ($reshook < 0) {
|
if ($reshook < 0) {
|
||||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
@@ -193,7 +193,7 @@ $permsuser = array();
|
|||||||
|
|
||||||
$sql = "SELECT DISTINCT ur.fk_id";
|
$sql = "SELECT DISTINCT ur.fk_id";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."user_rights as ur";
|
$sql .= " FROM ".MAIN_DB_PREFIX."user_rights as ur";
|
||||||
$sql .= " WHERE ur.entity = ".$entity;
|
$sql .= " WHERE ur.entity = ".((int) $entity);
|
||||||
$sql .= " AND ur.fk_user = ".((int) $object->id);
|
$sql .= " AND ur.fk_user = ".((int) $object->id);
|
||||||
|
|
||||||
dol_syslog("get user perms", LOG_DEBUG);
|
dol_syslog("get user perms", LOG_DEBUG);
|
||||||
@@ -386,7 +386,7 @@ if ($result) {
|
|||||||
|
|
||||||
// Picto and label of module
|
// Picto and label of module
|
||||||
print '<td class="maxwidthonsmartphone tdoverflowonsmartphone">';
|
print '<td class="maxwidthonsmartphone tdoverflowonsmartphone">';
|
||||||
//print img_object('', $picto, 'class="pictoobjectwidth"').' '.$objMod->getName();
|
//print img_object('', $picto, 'class="inline-block pictoobjectwidth"').' '.$objMod->getName();
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
// Permission and tick
|
// Permission and tick
|
||||||
|
|||||||
@@ -226,9 +226,9 @@ if ($rss) {
|
|||||||
// Find the subdirectory name as the reference
|
// Find the subdirectory name as the reference
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
$check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname);
|
$check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname);
|
||||||
$accessallowed = $check_access['accessallowed'];
|
$accessallowed = empty($check_access['accessallowed']) ? '' : $check_access['accessallowed'];
|
||||||
$sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals'];
|
$sqlprotectagainstexternals = empty($check_access['sqlprotectagainstexternals']) ? '' : $check_access['sqlprotectagainstexternals'];
|
||||||
$fullpath_original_file = $check_access['original_file']; // $fullpath_original_file is now a full path name
|
$fullpath_original_file = empty($check_access['original_file']) ? '' : $check_access['original_file']; // $fullpath_original_file is now a full path name
|
||||||
if ($hashp) {
|
if ($hashp) {
|
||||||
$accessallowed = 1; // When using hashp, link is public so we force $accessallowed
|
$accessallowed = 1; // When using hashp, link is public so we force $accessallowed
|
||||||
$sqlprotectagainstexternals = '';
|
$sqlprotectagainstexternals = '';
|
||||||
|
|||||||
Reference in New Issue
Block a user