Merge branch 'develop' of https://github.com/Dolibarr/dolibarr.git into develop_dict
This commit is contained in:
commit
2fffd2fa6f
@ -2,6 +2,7 @@
|
|||||||
# from Dolibarr GitHub repository.
|
# from Dolibarr GitHub repository.
|
||||||
# For syntax, see http://about.travis-ci.org/docs/user/languages/php/
|
# For syntax, see http://about.travis-ci.org/docs/user/languages/php/
|
||||||
|
|
||||||
|
dist: precise
|
||||||
sudo: required
|
sudo: required
|
||||||
|
|
||||||
language: php
|
language: php
|
||||||
@ -10,7 +11,7 @@ php:
|
|||||||
- '5.3'
|
- '5.3'
|
||||||
- '5.4'
|
- '5.4'
|
||||||
- '5.5'
|
- '5.5'
|
||||||
- '5.6'
|
- '5.6.29'
|
||||||
- '7.0'
|
- '7.0'
|
||||||
- '7.1'
|
- '7.1'
|
||||||
- nightly
|
- nightly
|
||||||
|
|||||||
@ -50,6 +50,7 @@ $action=GETPOST('action','alpha')?GETPOST('action','alpha'):'view';
|
|||||||
$confirm=GETPOST('confirm','alpha');
|
$confirm=GETPOST('confirm','alpha');
|
||||||
$id=GETPOST('id','int');
|
$id=GETPOST('id','int');
|
||||||
$rowid=GETPOST('rowid','alpha');
|
$rowid=GETPOST('rowid','alpha');
|
||||||
|
$search_label=GETPOST('search_label','alpha');
|
||||||
|
|
||||||
$allowed=$user->admin;
|
$allowed=$user->admin;
|
||||||
if (! $allowed) accessforbidden();
|
if (! $allowed) accessforbidden();
|
||||||
@ -78,10 +79,6 @@ $hookmanager->initHooks(array('emailtemplates'));
|
|||||||
$tabname=array();
|
$tabname=array();
|
||||||
$tabname[25]= MAIN_DB_PREFIX."c_email_templates";
|
$tabname[25]= MAIN_DB_PREFIX."c_email_templates";
|
||||||
|
|
||||||
// Requests to extract data
|
|
||||||
$tabsql=array();
|
|
||||||
$tabsql[25]= "SELECT rowid as rowid, label, type_template, private, position, topic, content_lines, content, active FROM ".MAIN_DB_PREFIX."c_email_templates WHERE entity IN (".getEntity('email_template').")";
|
|
||||||
|
|
||||||
// Criteria to sort dictionaries
|
// Criteria to sort dictionaries
|
||||||
$tabsqlsort=array();
|
$tabsqlsort=array();
|
||||||
$tabsqlsort[25]="label ASC";
|
$tabsqlsort[25]="label ASC";
|
||||||
@ -173,211 +170,223 @@ $id = 25;
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (GETPOST('button_removefilter') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter_x'))
|
if (GETPOST('cancel')) { $action='list'; $massaction=''; }
|
||||||
{
|
if (! GETPOST('confirmmassaction') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; }
|
||||||
//$search_country_id = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actions add or modify an entry into a dictionary
|
$parameters=array();
|
||||||
if (GETPOST('actionadd') || GETPOST('actionmodify'))
|
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
||||||
{
|
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
$listfield=explode(',', str_replace(' ', '',$tabfield[$id]));
|
|
||||||
$listfieldinsert=explode(',',$tabfieldinsert[$id]);
|
|
||||||
$listfieldmodify=explode(',',$tabfieldinsert[$id]);
|
|
||||||
$listfieldvalue=explode(',',$tabfieldvalue[$id]);
|
|
||||||
|
|
||||||
// Check that all fields are filled
|
if (empty($reshook))
|
||||||
$ok=1;
|
{
|
||||||
foreach ($listfield as $f => $value)
|
// Purge search criteria
|
||||||
|
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") ||GETPOST("button_removefilter")) // All tests are required to be compatible with all browsers
|
||||||
{
|
{
|
||||||
if ($value == 'content') continue;
|
$search_label='';
|
||||||
if ($value == 'content_lines') continue;
|
$toselect='';
|
||||||
if ($value == 'content') $value='content-'.$rowid;
|
$search_array_options=array();
|
||||||
if ($value == 'content_lines') $value='content_lines-'.$rowid;
|
|
||||||
|
|
||||||
if (! isset($_POST[$value]) || $_POST[$value]=='')
|
|
||||||
{
|
|
||||||
$ok=0;
|
|
||||||
$fieldnamekey=$listfield[$f];
|
|
||||||
// We take translate key of field
|
|
||||||
if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label')) $fieldnamekey='Label';
|
|
||||||
if ($fieldnamekey == 'libelle_facture') $fieldnamekey = 'LabelOnDocuments';
|
|
||||||
if ($fieldnamekey == 'code') $fieldnamekey = 'Code';
|
|
||||||
if ($fieldnamekey == 'note') $fieldnamekey = 'Note';
|
|
||||||
if ($fieldnamekey == 'type') $fieldnamekey = 'Type';
|
|
||||||
|
|
||||||
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si verif ok et action add, on ajoute la ligne
|
// Actions add or modify an entry into a dictionary
|
||||||
if ($ok && GETPOST('actionadd'))
|
if (GETPOST('actionadd') || GETPOST('actionmodify'))
|
||||||
{
|
{
|
||||||
if ($tabrowid[$id])
|
$listfield=explode(',', str_replace(' ', '',$tabfield[$id]));
|
||||||
|
$listfieldinsert=explode(',',$tabfieldinsert[$id]);
|
||||||
|
$listfieldmodify=explode(',',$tabfieldinsert[$id]);
|
||||||
|
$listfieldvalue=explode(',',$tabfieldvalue[$id]);
|
||||||
|
|
||||||
|
// Check that all fields are filled
|
||||||
|
$ok=1;
|
||||||
|
foreach ($listfield as $f => $value)
|
||||||
{
|
{
|
||||||
// Recupere id libre pour insertion
|
if ($value == 'content') continue;
|
||||||
$newid=0;
|
if ($value == 'content_lines') continue;
|
||||||
$sql = "SELECT max(".$tabrowid[$id].") newid from ".$tabname[$id];
|
if ($value == 'content') $value='content-'.$rowid;
|
||||||
$result = $db->query($sql);
|
if ($value == 'content_lines') $value='content_lines-'.$rowid;
|
||||||
if ($result)
|
|
||||||
|
if (! isset($_POST[$value]) || $_POST[$value]=='')
|
||||||
{
|
{
|
||||||
$obj = $db->fetch_object($result);
|
$ok=0;
|
||||||
$newid=($obj->newid + 1);
|
$fieldnamekey=$listfield[$f];
|
||||||
|
// We take translate key of field
|
||||||
|
if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label')) $fieldnamekey='Label';
|
||||||
|
if ($fieldnamekey == 'libelle_facture') $fieldnamekey = 'LabelOnDocuments';
|
||||||
|
if ($fieldnamekey == 'code') $fieldnamekey = 'Code';
|
||||||
|
if ($fieldnamekey == 'note') $fieldnamekey = 'Note';
|
||||||
|
if ($fieldnamekey == 'type') $fieldnamekey = 'Type';
|
||||||
|
|
||||||
} else {
|
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
|
||||||
dol_print_error($db);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add new entry
|
// Si verif ok et action add, on ajoute la ligne
|
||||||
$sql = "INSERT INTO ".$tabname[$id]." (";
|
if ($ok && GETPOST('actionadd'))
|
||||||
// List of fields
|
{
|
||||||
if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
|
if ($tabrowid[$id])
|
||||||
$sql.= $tabrowid[$id].",";
|
{
|
||||||
$sql.= $tabfieldinsert[$id];
|
// Recupere id libre pour insertion
|
||||||
$sql.=",active)";
|
$newid=0;
|
||||||
$sql.= " VALUES(";
|
$sql = "SELECT max(".$tabrowid[$id].") newid from ".$tabname[$id];
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if ($result)
|
||||||
|
{
|
||||||
|
$obj = $db->fetch_object($result);
|
||||||
|
$newid=($obj->newid + 1);
|
||||||
|
|
||||||
// List of values
|
} else {
|
||||||
if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
|
dol_print_error($db);
|
||||||
$sql.= $newid.",";
|
}
|
||||||
$i=0;
|
|
||||||
foreach ($listfieldinsert as $f => $value)
|
|
||||||
{
|
|
||||||
//var_dump($i.' - '.$listfieldvalue[$i].' - '.$_POST[$listfieldvalue[$i]].' - '.$value);
|
|
||||||
if ($value == 'entity') {
|
|
||||||
$_POST[$listfieldvalue[$i]] = $conf->entity;
|
|
||||||
}
|
}
|
||||||
if ($i) $sql.=",";
|
|
||||||
if ($value == 'private' && ! is_numeric($_POST[$listfieldvalue[$i]])) $_POST[$listfieldvalue[$i]]='0';
|
|
||||||
if ($value == 'position' && ! is_numeric($_POST[$listfieldvalue[$i]])) $_POST[$listfieldvalue[$i]]='1';
|
|
||||||
if ($_POST[$listfieldvalue[$i]] == '') $sql.="null"; // For vat, we want/accept code = ''
|
|
||||||
else $sql.="'".$db->escape($_POST[$listfieldvalue[$i]])."'";
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
$sql.=",1)";
|
|
||||||
|
|
||||||
dol_syslog("actionadd", LOG_DEBUG);
|
// Add new entry
|
||||||
$result = $db->query($sql);
|
$sql = "INSERT INTO ".$tabname[$id]." (";
|
||||||
if ($result) // Add is ok
|
// List of fields
|
||||||
{
|
if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
|
||||||
setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs');
|
$sql.= $tabrowid[$id].",";
|
||||||
$_POST=array('id'=>$id); // Clean $_POST array, we keep only
|
$sql.= $tabfieldinsert[$id];
|
||||||
}
|
$sql.=",active)";
|
||||||
else
|
$sql.= " VALUES(";
|
||||||
{
|
|
||||||
if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
|
// List of values
|
||||||
setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors');
|
if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
|
||||||
|
$sql.= $newid.",";
|
||||||
|
$i=0;
|
||||||
|
foreach ($listfieldinsert as $f => $value)
|
||||||
|
{
|
||||||
|
//var_dump($i.' - '.$listfieldvalue[$i].' - '.$_POST[$listfieldvalue[$i]].' - '.$value);
|
||||||
|
if ($value == 'entity') {
|
||||||
|
$_POST[$listfieldvalue[$i]] = $conf->entity;
|
||||||
|
}
|
||||||
|
if ($i) $sql.=",";
|
||||||
|
if ($value == 'private' && ! is_numeric($_POST[$listfieldvalue[$i]])) $_POST[$listfieldvalue[$i]]='0';
|
||||||
|
if ($value == 'position' && ! is_numeric($_POST[$listfieldvalue[$i]])) $_POST[$listfieldvalue[$i]]='1';
|
||||||
|
if ($_POST[$listfieldvalue[$i]] == '') $sql.="null"; // For vat, we want/accept code = ''
|
||||||
|
else $sql.="'".$db->escape($_POST[$listfieldvalue[$i]])."'";
|
||||||
|
$i++;
|
||||||
}
|
}
|
||||||
else {
|
$sql.=",1)";
|
||||||
dol_print_error($db);
|
|
||||||
|
dol_syslog("actionadd", LOG_DEBUG);
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if ($result) // Add is ok
|
||||||
|
{
|
||||||
|
setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs');
|
||||||
|
$_POST=array('id'=>$id); // Clean $_POST array, we keep only
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
|
||||||
|
setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si verif ok et action modify, on modifie la ligne
|
||||||
|
if ($ok && GETPOST('actionmodify'))
|
||||||
|
{
|
||||||
|
if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
|
||||||
|
else { $rowidcol="rowid"; }
|
||||||
|
|
||||||
|
// Modify entry
|
||||||
|
$sql = "UPDATE ".$tabname[$id]." SET ";
|
||||||
|
// Modifie valeur des champs
|
||||||
|
if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldmodify))
|
||||||
|
{
|
||||||
|
$sql.= $tabrowid[$id]."=";
|
||||||
|
$sql.= "'".$db->escape($rowid)."', ";
|
||||||
|
}
|
||||||
|
$i = 0;
|
||||||
|
foreach ($listfieldmodify as $field)
|
||||||
|
{
|
||||||
|
if ($field == 'content') $_POST['content']=$_POST['content-'.$rowid];
|
||||||
|
if ($field == 'content_lines') $_POST['content_lines']=$_POST['content_lines-'.$rowid];
|
||||||
|
if ($field == 'entity') {
|
||||||
|
$_POST[$listfieldvalue[$i]] = $conf->entity;
|
||||||
|
}
|
||||||
|
if ($i) $sql.=",";
|
||||||
|
$sql.= $field."=";
|
||||||
|
if ($_POST[$listfieldvalue[$i]] == '') $sql.="null"; // For vat, we want/accept code = ''
|
||||||
|
else $sql.="'".$db->escape($_POST[$listfieldvalue[$i]])."'";
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$sql.= " WHERE ".$rowidcol." = '".$rowid."'";
|
||||||
|
|
||||||
|
dol_syslog("actionmodify", LOG_DEBUG);
|
||||||
|
//print $sql;
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if (! $resql)
|
||||||
|
{
|
||||||
|
setEventMessages($db->error(), null, 'errors');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si verif ok et action modify, on modifie la ligne
|
if ($action == 'confirm_delete' && $confirm == 'yes') // delete
|
||||||
if ($ok && GETPOST('actionmodify'))
|
|
||||||
{
|
{
|
||||||
if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
|
if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
|
||||||
else { $rowidcol="rowid"; }
|
else { $rowidcol="rowid"; }
|
||||||
|
|
||||||
// Modify entry
|
$sql = "DELETE from ".$tabname[$id]." WHERE ".$rowidcol."='".$rowid."'";
|
||||||
$sql = "UPDATE ".$tabname[$id]." SET ";
|
|
||||||
// Modifie valeur des champs
|
|
||||||
if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldmodify))
|
|
||||||
{
|
|
||||||
$sql.= $tabrowid[$id]."=";
|
|
||||||
$sql.= "'".$db->escape($rowid)."', ";
|
|
||||||
}
|
|
||||||
$i = 0;
|
|
||||||
foreach ($listfieldmodify as $field)
|
|
||||||
{
|
|
||||||
if ($field == 'content') $_POST['content']=$_POST['content-'.$rowid];
|
|
||||||
if ($field == 'content_lines') $_POST['content_lines']=$_POST['content_lines-'.$rowid];
|
|
||||||
if ($field == 'entity') {
|
|
||||||
$_POST[$listfieldvalue[$i]] = $conf->entity;
|
|
||||||
}
|
|
||||||
if ($i) $sql.=",";
|
|
||||||
$sql.= $field."=";
|
|
||||||
if ($_POST[$listfieldvalue[$i]] == '') $sql.="null"; // For vat, we want/accept code = ''
|
|
||||||
else $sql.="'".$db->escape($_POST[$listfieldvalue[$i]])."'";
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
$sql.= " WHERE ".$rowidcol." = '".$rowid."'";
|
|
||||||
|
|
||||||
dol_syslog("actionmodify", LOG_DEBUG);
|
dol_syslog("delete", LOG_DEBUG);
|
||||||
//print $sql;
|
$result = $db->query($sql);
|
||||||
$resql = $db->query($sql);
|
if (! $result)
|
||||||
if (! $resql)
|
|
||||||
{
|
{
|
||||||
setEventMessages($db->error(), null, 'errors');
|
if ($db->errno() == 'DB_ERROR_CHILD_EXISTS')
|
||||||
|
{
|
||||||
|
setEventMessages($langs->transnoentities("ErrorRecordIsUsedByChild"), null, 'errors');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($action == 'confirm_delete' && $confirm == 'yes') // delete
|
// activate
|
||||||
{
|
if ($action == $acts[0])
|
||||||
if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
|
|
||||||
else { $rowidcol="rowid"; }
|
|
||||||
|
|
||||||
$sql = "DELETE from ".$tabname[$id]." WHERE ".$rowidcol."='".$rowid."'";
|
|
||||||
|
|
||||||
dol_syslog("delete", LOG_DEBUG);
|
|
||||||
$result = $db->query($sql);
|
|
||||||
if (! $result)
|
|
||||||
{
|
{
|
||||||
if ($db->errno() == 'DB_ERROR_CHILD_EXISTS')
|
if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
|
||||||
{
|
else { $rowidcol="rowid"; }
|
||||||
setEventMessages($langs->transnoentities("ErrorRecordIsUsedByChild"), null, 'errors');
|
|
||||||
|
if ($rowid) {
|
||||||
|
$sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE ".$rowidcol."='".$rowid."'";
|
||||||
}
|
}
|
||||||
else
|
elseif ($code) {
|
||||||
|
$sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE code='".$code."'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if (!$result)
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// disable
|
||||||
|
if ($action == $acts[1])
|
||||||
|
{
|
||||||
|
if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
|
||||||
|
else { $rowidcol="rowid"; }
|
||||||
|
|
||||||
|
if ($rowid) {
|
||||||
|
$sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE ".$rowidcol."='".$rowid."'";
|
||||||
|
}
|
||||||
|
elseif ($code) {
|
||||||
|
$sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE code='".$code."'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if (!$result)
|
||||||
{
|
{
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// activate
|
|
||||||
if ($action == $acts[0])
|
|
||||||
{
|
|
||||||
if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
|
|
||||||
else { $rowidcol="rowid"; }
|
|
||||||
|
|
||||||
if ($rowid) {
|
|
||||||
$sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE ".$rowidcol."='".$rowid."'";
|
|
||||||
}
|
|
||||||
elseif ($code) {
|
|
||||||
$sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE code='".$code."'";
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $db->query($sql);
|
|
||||||
if (!$result)
|
|
||||||
{
|
|
||||||
dol_print_error($db);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// disable
|
|
||||||
if ($action == $acts[1])
|
|
||||||
{
|
|
||||||
if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
|
|
||||||
else { $rowidcol="rowid"; }
|
|
||||||
|
|
||||||
if ($rowid) {
|
|
||||||
$sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE ".$rowidcol."='".$rowid."'";
|
|
||||||
}
|
|
||||||
elseif ($code) {
|
|
||||||
$sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE code='".$code."'";
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $db->query($sql);
|
|
||||||
if (!$result)
|
|
||||||
{
|
|
||||||
dol_print_error($db);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* View
|
* View
|
||||||
@ -416,8 +425,11 @@ if ($action == 'delete')
|
|||||||
}
|
}
|
||||||
//var_dump($elementList);
|
//var_dump($elementList);
|
||||||
|
|
||||||
// Complete requete recherche valeurs avec critere de tri
|
|
||||||
$sql=$tabsql[$id];
|
$sql="SELECT rowid as rowid, label, type_template, private, position, topic, content_lines, content, active";
|
||||||
|
$sql.=" FROM ".MAIN_DB_PREFIX."c_email_templates";
|
||||||
|
$sql.=" WHERE entity IN (".getEntity('email_template').")";
|
||||||
|
if ($search_label) $sql.=natural_search('label', $search_label);
|
||||||
|
|
||||||
if ($search_country_id > 0)
|
if ($search_country_id > 0)
|
||||||
{
|
{
|
||||||
@ -572,9 +584,19 @@ if ($action != 'edit')
|
|||||||
|
|
||||||
|
|
||||||
$colspan=count($fieldlist)+1;
|
$colspan=count($fieldlist)+1;
|
||||||
print '<tr><td colspan="'.$colspan.'"> </td></tr>'; // Keep to have a line with enough height
|
//print '<tr><td colspan="'.$colspan.'"> </td></tr>'; // Keep to have a line with enough height
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
print '</form>';
|
||||||
|
|
||||||
|
print '<br>';
|
||||||
|
|
||||||
|
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
||||||
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
|
print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from','alpha')).'">';
|
||||||
|
|
||||||
|
print '<table class="noborder" width="100%">';
|
||||||
|
|
||||||
// List of available record in database
|
// List of available record in database
|
||||||
dol_syslog("htdocs/admin/dict", LOG_DEBUG);
|
dol_syslog("htdocs/admin/dict", LOG_DEBUG);
|
||||||
@ -599,8 +621,26 @@ if ($resql)
|
|||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Title line with search boxes
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
$filterfound=0;
|
||||||
|
foreach ($fieldlist as $field => $value)
|
||||||
|
{
|
||||||
|
if ($value == 'label') print '<td class="liste_titre"><input type="text" name="search_label" value="'.dol_escape_htmltag($search_label).'"></td>';
|
||||||
|
elseif (! in_array($value, array('content', 'content_lines'))) print '<td class="liste_titre"></td>';
|
||||||
|
}
|
||||||
|
if (empty($conf->global->MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES)) print '<td class="liste_titre"></td>';
|
||||||
|
print '<td class="liste_titre"></td>';
|
||||||
|
// Action column
|
||||||
|
print '<td class="liste_titre" align="right">';
|
||||||
|
$searchpicto=$form->showFilterButtons();
|
||||||
|
print $searchpicto;
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
// Title of lines
|
// Title of lines
|
||||||
print '<tr class="liste_titre'.($action != 'edit' ? ' liste_titre_add' : '').'">';
|
print '<tr class="liste_titre">';
|
||||||
foreach ($fieldlist as $field => $value)
|
foreach ($fieldlist as $field => $value)
|
||||||
{
|
{
|
||||||
// Determine le nom du champ par rapport aux noms possibles
|
// Determine le nom du champ par rapport aux noms possibles
|
||||||
@ -642,18 +682,6 @@ if ($resql)
|
|||||||
print getTitleFieldOfList('');
|
print getTitleFieldOfList('');
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
// Title line with search boxes
|
|
||||||
print '<tr class="liste_titre">';
|
|
||||||
$filterfound=0;
|
|
||||||
foreach ($fieldlist as $field => $value)
|
|
||||||
{
|
|
||||||
if (! in_array($field, array('content', 'content_lines'))) print '<td class="liste_titre"></td>';
|
|
||||||
}
|
|
||||||
if (empty($conf->global->MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES)) print '<td class="liste_titre"></td>';
|
|
||||||
print '<td class="liste_titre"></td>';
|
|
||||||
print '<td class="liste_titre"></td>';
|
|
||||||
print '</tr>';
|
|
||||||
|
|
||||||
if ($num)
|
if ($num)
|
||||||
{
|
{
|
||||||
// Lines with values
|
// Lines with values
|
||||||
|
|||||||
@ -159,19 +159,12 @@ $page_name = "MultiCurrencySetup";
|
|||||||
llxHeader('', $langs->trans($page_name));
|
llxHeader('', $langs->trans($page_name));
|
||||||
|
|
||||||
// Subheader
|
// Subheader
|
||||||
$linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php">'
|
$linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php">' . $langs->trans("BackToModuleList") . '</a>';
|
||||||
. $langs->trans("BackToModuleList") . '</a>';
|
|
||||||
print_fiche_titre($langs->trans($page_name), $linkback);
|
print_fiche_titre($langs->trans($page_name), $linkback);
|
||||||
|
|
||||||
// Configuration header
|
// Configuration header
|
||||||
$head = multicurrencyAdminPrepareHead();
|
$head = multicurrencyAdminPrepareHead();
|
||||||
dol_fiche_head(
|
dol_fiche_head($head, 'settings', $langs->trans("ModuleSetup"), -1, "multicurrency");
|
||||||
$head,
|
|
||||||
'settings',
|
|
||||||
$langs->trans("ModuleSetup"),
|
|
||||||
0,
|
|
||||||
"multicurrency"
|
|
||||||
);
|
|
||||||
|
|
||||||
// Setup page goes here
|
// Setup page goes here
|
||||||
$form=new Form($db);
|
$form=new Form($db);
|
||||||
|
|||||||
@ -229,6 +229,14 @@ foreach ($syslogModules as $moduleName)
|
|||||||
|
|
||||||
print $option['name'].': <input type="text" class="flat" name="'.$option['constant'].'" value="'.$value.'"'.(isset($option['attr']) ? ' '.$option['attr'] : '').'>';
|
print $option['name'].': <input type="text" class="flat" name="'.$option['constant'].'" value="'.$value.'"'.(isset($option['attr']) ? ' '.$option['attr'] : '').'>';
|
||||||
if (! empty($option['example'])) print '<br>'.$langs->trans("Example").': '.$option['example'];
|
if (! empty($option['example'])) print '<br>'.$langs->trans("Example").': '.$option['example'];
|
||||||
|
|
||||||
|
if ($option['constant'] == 'SYSLOG_FILE' && preg_match('/^DOL_DATA_ROOT\/[^\/]*$/',$value))
|
||||||
|
{
|
||||||
|
$filelogparam =' (<a href="'.DOL_URL_ROOT.'/document.php?modulepart=logs&file='.basename($value).'">';
|
||||||
|
$filelogparam.=$langs->trans('Download');
|
||||||
|
$filelogparam.=$filelog.'</a>)';
|
||||||
|
print $filelogparam;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|||||||
@ -83,7 +83,15 @@ if (! empty($conf->syslog->enabled))
|
|||||||
{
|
{
|
||||||
print '<input type="radio" name="choice" value="logfile"';
|
print '<input type="radio" name="choice" value="logfile"';
|
||||||
print ($choice && $choice=='logfile') ? ' checked' : '';
|
print ($choice && $choice=='logfile') ? ' checked' : '';
|
||||||
print '> '.$langs->trans("PurgeDeleteLogFile",$filelog).'<br><br>';
|
$filelogparam=$filelog;
|
||||||
|
if ($user->admin && preg_match('/^dolibarr.*\.log$/', basename($filelog)))
|
||||||
|
{
|
||||||
|
$filelogparam ='<a href="'.DOL_URL_ROOT.'/document.php?modulepart=logs&file=';
|
||||||
|
$filelogparam.=basename($filelog);
|
||||||
|
$filelogparam.='">'.$filelog.'</a>';
|
||||||
|
}
|
||||||
|
print '> '.$langs->trans("PurgeDeleteLogFile", $filelogparam);
|
||||||
|
print '<br><br>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<input type="radio" name="choice" value="tempfiles"';
|
print '<input type="radio" name="choice" value="tempfiles"';
|
||||||
|
|||||||
@ -76,7 +76,7 @@ if ($mode == 'customer')
|
|||||||
if ($mode == 'supplier')
|
if ($mode == 'supplier')
|
||||||
{
|
{
|
||||||
$title=$langs->trans("OrdersStatisticsSuppliers").' ('.$langs->trans("SentToSuppliers").")";
|
$title=$langs->trans("OrdersStatisticsSuppliers").' ('.$langs->trans("SentToSuppliers").")";
|
||||||
$dir=$conf->fournisseur->dir_output.'/commande/temp';
|
$dir=$conf->fournisseur->commande->dir_temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
llxHeader('', $title);
|
llxHeader('', $title);
|
||||||
|
|||||||
@ -185,8 +185,8 @@ class DoliDBPgsql extends DoliDB
|
|||||||
|
|
||||||
// we are inside create table statement so lets process datatypes
|
// we are inside create table statement so lets process datatypes
|
||||||
if (preg_match('/(ISAM|innodb)/i',$line)) { // end of create table sequence
|
if (preg_match('/(ISAM|innodb)/i',$line)) { // end of create table sequence
|
||||||
$line=preg_replace('/\)[\s\t]*type[\s\t]*=[\s\t]*(MyISAM|innodb);/i',');',$line);
|
$line=preg_replace('/\)[\s\t]*type[\s\t]*=[\s\t]*(MyISAM|innodb).*;/i',');',$line);
|
||||||
$line=preg_replace('/\)[\s\t]*engine[\s\t]*=[\s\t]*(MyISAM|innodb);/i',');',$line);
|
$line=preg_replace('/\)[\s\t]*engine[\s\t]*=[\s\t]*(MyISAM|innodb).*;/i',');',$line);
|
||||||
$line=preg_replace('/,$/','',$line);
|
$line=preg_replace('/,$/','',$line);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,6 +210,7 @@ class DoliDBPgsql extends DoliDB
|
|||||||
// tinytext/mediumtext -> text
|
// tinytext/mediumtext -> text
|
||||||
$line=preg_replace('/tinytext/i','text',$line);
|
$line=preg_replace('/tinytext/i','text',$line);
|
||||||
$line=preg_replace('/mediumtext/i','text',$line);
|
$line=preg_replace('/mediumtext/i','text',$line);
|
||||||
|
$line=preg_replace('/longtext/i','text',$line);
|
||||||
|
|
||||||
$line=preg_replace('/text\([0-9]+\)/i','text',$line);
|
$line=preg_replace('/text\([0-9]+\)/i','text',$line);
|
||||||
|
|
||||||
|
|||||||
@ -1825,8 +1825,20 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity,
|
|||||||
$lire='creer'; $read='write'; $download='upload';
|
$lire='creer'; $read='write'; $download='upload';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wrapping for miscellaneous medias files
|
||||||
|
if ($modulepart == 'medias' && !empty($dolibarr_main_data_root))
|
||||||
|
{
|
||||||
|
$accessallowed=1;
|
||||||
|
$original_file=$dolibarr_main_data_root.'/medias/'.$original_file;
|
||||||
|
}
|
||||||
|
// Wrapping for *.log files, like when used with url http://.../document.php?modulepart=logs&file=dolibarr.log
|
||||||
|
elseif ($modulepart == 'logs' && !empty($dolibarr_main_data_root))
|
||||||
|
{
|
||||||
|
$accessallowed=($user->admin && basename($original_file) == $original_file && preg_match('/^dolibarr.*\.log$/', basename($original_file)));
|
||||||
|
$original_file=$dolibarr_main_data_root.'/'.$original_file;
|
||||||
|
}
|
||||||
// Wrapping for some images
|
// Wrapping for some images
|
||||||
if (($modulepart == 'mycompany' || $modulepart == 'companylogo') && !empty($conf->mycompany->dir_output))
|
elseif (($modulepart == 'mycompany' || $modulepart == 'companylogo') && !empty($conf->mycompany->dir_output))
|
||||||
{
|
{
|
||||||
$accessallowed=1;
|
$accessallowed=1;
|
||||||
$original_file=$conf->mycompany->dir_output.'/logos/'.$original_file;
|
$original_file=$conf->mycompany->dir_output.'/logos/'.$original_file;
|
||||||
@ -1912,7 +1924,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity,
|
|||||||
elseif ($modulepart == 'orderstatssupplier' && !empty($conf->fournisseur->dir_output))
|
elseif ($modulepart == 'orderstatssupplier' && !empty($conf->fournisseur->dir_output))
|
||||||
{
|
{
|
||||||
if ($fuser->rights->fournisseur->commande->{$lire}) $accessallowed=1;
|
if ($fuser->rights->fournisseur->commande->{$lire}) $accessallowed=1;
|
||||||
$original_file=$conf->fournisseur->dir_output.'/commande/temp/'.$original_file;
|
$original_file=$conf->fournisseur->commande->dir_temp.'/'.$original_file;
|
||||||
}
|
}
|
||||||
// Wrapping pour les images des stats factures
|
// Wrapping pour les images des stats factures
|
||||||
elseif ($modulepart == 'billstats' && !empty($conf->facture->dir_temp))
|
elseif ($modulepart == 'billstats' && !empty($conf->facture->dir_temp))
|
||||||
@ -2369,13 +2381,6 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity,
|
|||||||
$original_file=$conf->fckeditor->dir_output.'/'.$original_file;
|
$original_file=$conf->fckeditor->dir_output.'/'.$original_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wrapping for miscellaneous medias files
|
|
||||||
elseif ($modulepart == 'medias' && !empty($dolibarr_main_data_root))
|
|
||||||
{
|
|
||||||
$accessallowed=1;
|
|
||||||
$original_file=$dolibarr_main_data_root.'/medias/'.$original_file;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapping for backups
|
// Wrapping for backups
|
||||||
else if ($modulepart == 'systemtools' && !empty($conf->admin->dir_output))
|
else if ($modulepart == 'systemtools' && !empty($conf->admin->dir_output))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -72,27 +72,32 @@ class mod_facture_fournisseur_tulip extends ModeleNumRefSuppliersInvoices
|
|||||||
$tooltip.=$langs->trans("GenericMaskCodes5");
|
$tooltip.=$langs->trans("GenericMaskCodes5");
|
||||||
|
|
||||||
// Parametrage du prefix
|
// Parametrage du prefix
|
||||||
$texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceStandard").'):</td>';
|
$texte.= '<tr><td>'.$langs->trans("Mask");
|
||||||
|
//$texte.= ' ('.$langs->trans("InvoiceStandard").')';
|
||||||
|
$texte.= ':</td>';
|
||||||
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskinvoice" value="'.$conf->global->SUPPLIER_INVOICE_TULIP_MASK.'">',$tooltip,1,1).'</td>';
|
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskinvoice" value="'.$conf->global->SUPPLIER_INVOICE_TULIP_MASK.'">',$tooltip,1,1).'</td>';
|
||||||
|
|
||||||
$texte.= '<td align="left" rowspan="2"> <input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button"></td>';
|
$texte.= '<td align="left" rowspan="2"> <input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button"></td>';
|
||||||
|
|
||||||
$texte.= '</tr>';
|
$texte.= '</tr>';
|
||||||
|
|
||||||
// Parametrage du prefix des replacement
|
if ($conf->global->MAIN_FEATURE_LEVEL >= 2)
|
||||||
$texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceReplacement").'):</td>';
|
{
|
||||||
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskreplacement" value="'.$conf->global->SUPPLIER_REPLACEMENT_TULIP_MASK.'">',$tooltip,1,1).'</td>';
|
// Parametrage du prefix des replacement
|
||||||
$texte.= '</tr>';
|
$texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceReplacement").'):</td>';
|
||||||
|
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskreplacement" value="'.$conf->global->SUPPLIER_REPLACEMENT_TULIP_MASK.'">',$tooltip,1,1).'</td>';
|
||||||
|
$texte.= '</tr>';
|
||||||
|
|
||||||
// Parametrage du prefix des avoirs
|
// Parametrage du prefix des avoirs
|
||||||
$texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceAvoir").'):</td>';
|
$texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceAvoir").'):</td>';
|
||||||
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskcredit" value="'.$conf->global->SUPPLIER_CREDIT_TULIP_MASK.'">',$tooltip,1,1).'</td>';
|
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskcredit" value="'.$conf->global->SUPPLIER_CREDIT_TULIP_MASK.'">',$tooltip,1,1).'</td>';
|
||||||
$texte.= '</tr>';
|
$texte.= '</tr>';
|
||||||
|
|
||||||
// Parametrage du prefix des acomptes
|
// Parametrage du prefix des acomptes
|
||||||
$texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceDeposit").'):</td>';
|
$texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceDeposit").'):</td>';
|
||||||
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskdeposit" value="'.$conf->global->SUPPLIER_DEPOSIT_TULIP_MASK.'">',$tooltip,1,1).'</td>';
|
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskdeposit" value="'.$conf->global->SUPPLIER_DEPOSIT_TULIP_MASK.'">',$tooltip,1,1).'</td>';
|
||||||
$texte.= '</tr>';
|
$texte.= '</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
$texte.= '</table>';
|
$texte.= '</table>';
|
||||||
$texte.= '</form>';
|
$texte.= '</form>';
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
* \brief Wrapper to download data files
|
* \brief Wrapper to download data files
|
||||||
* \remarks Call of this wrapper is made with URL:
|
* \remarks Call of this wrapper is made with URL:
|
||||||
* document.php?modulepart=repfichierconcerne&file=pathrelatifdufichier
|
* document.php?modulepart=repfichierconcerne&file=pathrelatifdufichier
|
||||||
|
* document.php?modulepart=logs&file=dolibarr.log
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define('NOTOKENRENEWAL',1); // Disables token renewal
|
define('NOTOKENRENEWAL',1); // Disables token renewal
|
||||||
@ -106,7 +107,7 @@ $refname=basename(dirname($original_file)."/");
|
|||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
if (empty($modulepart)) accessforbidden('Bad value for parameter modulepart');
|
if (empty($modulepart)) accessforbidden('Bad value for parameter modulepart');
|
||||||
$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 = $check_access['accessallowed'];
|
||||||
$sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals'];
|
$sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals'];
|
||||||
$original_file = $check_access['original_file']; // original_file is now a full path name
|
$original_file = $check_access['original_file']; // original_file is now a full path name
|
||||||
|
|||||||
@ -1111,7 +1111,7 @@ if ($resql)
|
|||||||
// Other picto tool
|
// Other picto tool
|
||||||
print '<td width="16" align="right" class="nobordernopadding hideonsmartphone">';
|
print '<td width="16" align="right" class="nobordernopadding hideonsmartphone">';
|
||||||
$filename=dol_sanitizeFileName($obj->ref);
|
$filename=dol_sanitizeFileName($obj->ref);
|
||||||
$filedir=$conf->fournisseur->dir_output.'/commande' . '/' . dol_sanitizeFileName($obj->ref);
|
$filedir=$conf->fournisseur->dir_output.'/commande/' . dol_sanitizeFileName($obj->ref);
|
||||||
print $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
|
print $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
|
||||||
print '</td></tr></table>';
|
print '</td></tr></table>';
|
||||||
|
|
||||||
|
|||||||
@ -360,7 +360,7 @@ INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype
|
|||||||
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (305,'PCG99-BASE','FINAN', 'XXXXXX', '511', '304', 'Valeurs à l''encaissement', 1);
|
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (305,'PCG99-BASE','FINAN', 'XXXXXX', '511', '304', 'Valeurs à l''encaissement', 1);
|
||||||
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (306,'PCG99-BASE','FINAN', 'BANK', '512', '304', 'Banques', 1);
|
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (306,'PCG99-BASE','FINAN', 'BANK', '512', '304', 'Banques', 1);
|
||||||
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (307,'PCG99-BASE','FINAN', 'XXXXXX', '514', '304', 'Chèques postaux', 1);
|
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (307,'PCG99-BASE','FINAN', 'XXXXXX', '514', '304', 'Chèques postaux', 1);
|
||||||
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (308,'PCG99-BASE','FINAN', 'XXXXXX', '515', '304', '"Caisses" du Trésor et des établissements publics', 1);
|
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (308,'PCG99-BASE','FINAN', 'XXXXXX', '515', '304', 'Caisses du Trésor et des établissements publics', 1);
|
||||||
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (309,'PCG99-BASE','FINAN', 'XXXXXX', '516', '304', 'Sociétés de bourse', 1);
|
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (309,'PCG99-BASE','FINAN', 'XXXXXX', '516', '304', 'Sociétés de bourse', 1);
|
||||||
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (310,'PCG99-BASE','FINAN', 'XXXXXX', '517', '304', 'Autres organismes financiers', 1);
|
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (310,'PCG99-BASE','FINAN', 'XXXXXX', '517', '304', 'Autres organismes financiers', 1);
|
||||||
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (311,'PCG99-BASE','FINAN', 'XXXXXX', '518', '304', 'Intérêts courus', 1);
|
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (311,'PCG99-BASE','FINAN', 'XXXXXX', '518', '304', 'Intérêts courus', 1);
|
||||||
|
|||||||
@ -91,7 +91,7 @@ insert into llx_const (name, value, type, note, visible) values ('MAILING_EMAIL_
|
|||||||
--
|
--
|
||||||
-- ODT Path
|
-- ODT Path
|
||||||
---
|
---
|
||||||
insert into `llx_const` (`name`, `entity`, `value`, `type`, `visible`) VALUES ('PRODUCT_ADDON_PDF_ODT_PATH', 1, 'DOL_DATA_ROOT/doctemplates/products', 'chaine', 0);
|
insert into llx_const (name, entity, value, type, visible) VALUES ('PRODUCT_ADDON_PDF_ODT_PATH', 1, 'DOL_DATA_ROOT/doctemplates/products', 'chaine', 0);
|
||||||
insert into `llx_const` (`name`, `entity`, `value`, `type`, `visible`) VALUES ('CONTRACT_ADDON_PDF_ODT_PATH', 1, 'DOL_DATA_ROOT/doctemplates/contracts', 'chaine', 0);
|
insert into llx_const (name, entity, value, type, visible) VALUES ('CONTRACT_ADDON_PDF_ODT_PATH', 1, 'DOL_DATA_ROOT/doctemplates/contracts', 'chaine', 0);
|
||||||
insert into `llx_const` (`name`, `entity`, `value`, `type`, `visible`) VALUES ('USERGROUP_ADDON_PDF_ODT_PATH', 1, 'DOL_DATA_ROOT/doctemplates/usergroups', 'chaine', 0);
|
insert into llx_const (name, entity, value, type, visible) VALUES ('USERGROUP_ADDON_PDF_ODT_PATH', 1, 'DOL_DATA_ROOT/doctemplates/usergroups', 'chaine', 0);
|
||||||
insert into `llx_const` (`name`, `entity`, `value`, `type`, `visible`) VALUES ('USER_ADDON_PDF_ODT_PATH', 1, 'DOL_DATA_ROOT/doctemplates/users', 'chaine', 0);
|
insert into llx_const (name, entity, value, type, visible) VALUES ('USER_ADDON_PDF_ODT_PATH', 1, 'DOL_DATA_ROOT/doctemplates/users', 'chaine', 0);
|
||||||
|
|||||||
@ -659,7 +659,7 @@ insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype,
|
|||||||
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (305,'PCG99-BASE','FINAN', 'XXXXXX', '511', '51', 'Valeurs à l''encaissement', '1');
|
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (305,'PCG99-BASE','FINAN', 'XXXXXX', '511', '51', 'Valeurs à l''encaissement', '1');
|
||||||
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (306,'PCG99-BASE','FINAN', 'BANK', '512', '51', 'Banques', '1');
|
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (306,'PCG99-BASE','FINAN', 'BANK', '512', '51', 'Banques', '1');
|
||||||
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (307,'PCG99-BASE','FINAN', 'XXXXXX', '514', '51', 'Chèques postaux', '1');
|
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (307,'PCG99-BASE','FINAN', 'XXXXXX', '514', '51', 'Chèques postaux', '1');
|
||||||
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (308,'PCG99-BASE','FINAN', 'XXXXXX', '515', '51', '"Caisses" du Trésor et des établissements publics', '1');
|
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (308,'PCG99-BASE','FINAN', 'XXXXXX', '515', '51', 'Caisses du Trésor et des établissements publics', '1');
|
||||||
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (309,'PCG99-BASE','FINAN', 'XXXXXX', '516', '51', 'Sociétés de bourse', '1');
|
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (309,'PCG99-BASE','FINAN', 'XXXXXX', '516', '51', 'Sociétés de bourse', '1');
|
||||||
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (310,'PCG99-BASE','FINAN', 'XXXXXX', '517', '51', 'Autres organismes financiers', '1');
|
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (310,'PCG99-BASE','FINAN', 'XXXXXX', '517', '51', 'Autres organismes financiers', '1');
|
||||||
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (311,'PCG99-BASE','FINAN', 'XXXXXX', '518', '51', 'Intérêts courus', '1');
|
insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (311,'PCG99-BASE','FINAN', 'XXXXXX', '518', '51', 'Intérêts courus', '1');
|
||||||
|
|||||||
@ -635,7 +635,7 @@ INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype,
|
|||||||
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (305,'PCG99-BASE','FINAN', 'XXXXXX', '511', '304', 'Valeurs à l''encaissement', '1');
|
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (305,'PCG99-BASE','FINAN', 'XXXXXX', '511', '304', 'Valeurs à l''encaissement', '1');
|
||||||
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (306,'PCG99-BASE','FINAN', 'BANK', '512', '304', 'Banques', '1');
|
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (306,'PCG99-BASE','FINAN', 'BANK', '512', '304', 'Banques', '1');
|
||||||
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (307,'PCG99-BASE','FINAN', 'XXXXXX', '514', '304', 'Chèques postaux', '1');
|
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (307,'PCG99-BASE','FINAN', 'XXXXXX', '514', '304', 'Chèques postaux', '1');
|
||||||
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (308,'PCG99-BASE','FINAN', 'XXXXXX', '515', '304', '"Caisses" du Trésor et des établissements publics', '1');
|
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (308,'PCG99-BASE','FINAN', 'XXXXXX', '515', '304', 'Caisses du Trésor et des établissements publics', '1');
|
||||||
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (309,'PCG99-BASE','FINAN', 'XXXXXX', '516', '304', 'Sociétés de bourse', '1');
|
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (309,'PCG99-BASE','FINAN', 'XXXXXX', '516', '304', 'Sociétés de bourse', '1');
|
||||||
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (310,'PCG99-BASE','FINAN', 'XXXXXX', '517', '304', 'Autres organismes financiers', '1');
|
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (310,'PCG99-BASE','FINAN', 'XXXXXX', '517', '304', 'Autres organismes financiers', '1');
|
||||||
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (311,'PCG99-BASE','FINAN', 'XXXXXX', '518', '304', 'Intérêts courus', '1');
|
INSERT INTO llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (311,'PCG99-BASE','FINAN', 'XXXXXX', '518', '304', 'Intérêts courus', '1');
|
||||||
|
|||||||
@ -493,7 +493,7 @@ CREATE TABLE llx_blockedlog_authority
|
|||||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||||
blockchain longtext NOT NULL,
|
blockchain longtext NOT NULL,
|
||||||
signature varchar(100) NOT NULL,
|
signature varchar(100) NOT NULL,
|
||||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
tms timestamp
|
||||||
) ENGINE=innodb;
|
) ENGINE=innodb;
|
||||||
|
|
||||||
ALTER TABLE llx_blockedlog_authority ADD INDEX signature (signature);
|
ALTER TABLE llx_blockedlog_authority ADD INDEX signature (signature);
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
-- ALTER TABLE llx_accounting_account MODIFY account_number VARCHAR(20) CHARACTER SET utf8;
|
-- ALTER TABLE llx_accounting_account MODIFY account_number VARCHAR(20) CHARACTER SET utf8;
|
||||||
-- ALTER TABLE llx_accounting_account MODIFY account_number VARCHAR(20) COLLATE utf8_unicode_ci;
|
-- ALTER TABLE llx_accounting_account MODIFY account_number VARCHAR(20) COLLATE utf8_unicode_ci;
|
||||||
-- You can check with "show full columns from llx_accounting_account";
|
-- You can check with 'show full columns from llx_accounting_account';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
-- You should have received a copy of the GNU General Public License
|
-- You should have received a copy of the GNU General Public License
|
||||||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
--
|
--
|
||||||
-- Table of "accounts" for accountancy expert module
|
-- Table of 'accounts' for accountancy expert module
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
|
|
||||||
create table llx_accounting_account
|
create table llx_accounting_account
|
||||||
|
|||||||
@ -65,7 +65,7 @@ create table llx_actioncomm
|
|||||||
errors_to varchar(256), -- when event was an email, we store here the erros_to
|
errors_to varchar(256), -- when event was an email, we store here the erros_to
|
||||||
|
|
||||||
recurid varchar(128), -- used to store event id to link each other all the repeating event record
|
recurid varchar(128), -- used to store event id to link each other all the repeating event record
|
||||||
recurrule varchar(128), -- contains string with ical format recurring rule like "FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=19" or "FREQ=WEEKLY;BYDAY=MO"
|
recurrule varchar(128), -- contains string with ical format recurring rule like 'FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=19' or 'FREQ=WEEKLY;BYDAY=MO'
|
||||||
recurdateend datetime, -- no more recurring event after this date
|
recurdateend datetime, -- no more recurring event after this date
|
||||||
|
|
||||||
fk_element integer DEFAULT NULL, -- For link to an element (proposal, invoice, order, ...)
|
fk_element integer DEFAULT NULL, -- For link to an element (proposal, invoice, order, ...)
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
-- You should have received a copy of the GNU General Public License
|
-- You should have received a copy of the GNU General Public License
|
||||||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
--
|
--
|
||||||
-- Table of "Plan de comptes" for accountancy expert module
|
-- Table to setup advanced targeting for emailing
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
|
|
||||||
CREATE TABLE llx_advtargetemailing
|
CREATE TABLE llx_advtargetemailing
|
||||||
|
|||||||
@ -3,5 +3,5 @@ CREATE TABLE llx_blockedlog_authority
|
|||||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||||
blockchain longtext NOT NULL,
|
blockchain longtext NOT NULL,
|
||||||
signature varchar(100) NOT NULL,
|
signature varchar(100) NOT NULL,
|
||||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
tms timestamp
|
||||||
) ENGINE=innodb;
|
) ENGINE=innodb;
|
||||||
|
|||||||
@ -20,7 +20,7 @@ create table llx_budget_lines
|
|||||||
(
|
(
|
||||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||||
fk_budget integer NOT NULL,
|
fk_budget integer NOT NULL,
|
||||||
fk_project_ids varchar(255) NOT NULL, -- 'IDS:x,y' = List of project ids related to this budget. If budget is dedicated to projects not yet started, we recommand to create a project "Projects to come". 'FILTER:ref=*ABC' = Can also be a dynamic rule to select projects.
|
fk_project_ids varchar(255) NOT NULL, -- 'IDS:x,y' = List of project ids related to this budget. If budget is dedicated to projects not yet started, we recommand to create a project 'Projects to come'. 'FILTER:ref=*ABC' = Can also be a dynamic rule to select projects.
|
||||||
amount double(24,8) NOT NULL,
|
amount double(24,8) NOT NULL,
|
||||||
datec datetime,
|
datec datetime,
|
||||||
tms timestamp,
|
tms timestamp,
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
create table llx_chargesociales
|
create table llx_chargesociales
|
||||||
(
|
(
|
||||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||||
ref varchar(16), -- "TX...."
|
ref varchar(16), -- 'TX....'
|
||||||
date_ech datetime NOT NULL, -- date echeance
|
date_ech datetime NOT NULL, -- date echeance
|
||||||
libelle varchar(80) NOT NULL,
|
libelle varchar(80) NOT NULL,
|
||||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||||
|
|||||||
@ -24,9 +24,10 @@ CREATE OR REPLACE FUNCTION UNIX_TIMESTAMP(TIMESTAMP WITHOUT TIME ZONE) RETURNS B
|
|||||||
|
|
||||||
CREATE OR REPLACE FUNCTION UNIX_TIMESTAMP(TIMESTAMP WITH TIME ZONE) RETURNS BIGINT LANGUAGE SQL IMMUTABLE STRICT AS 'SELECT EXTRACT(EPOCH FROM $1)::bigint;';
|
CREATE OR REPLACE FUNCTION UNIX_TIMESTAMP(TIMESTAMP WITH TIME ZONE) RETURNS BIGINT LANGUAGE SQL IMMUTABLE STRICT AS 'SELECT EXTRACT(EPOCH FROM $1)::bigint;';
|
||||||
|
|
||||||
|
DROP FUNCTION date_format(timestamp without time zone,text);
|
||||||
CREATE OR REPLACE FUNCTION date_format(timestamp without time zone, text) RETURNS text AS $$ DECLARE i int := 1; temp text := ''; c text; n text; res text; BEGIN WHILE i <= pg_catalog.length($2) LOOP c := SUBSTRING ($2 FROM i FOR 1); IF c = '%' AND i != pg_catalog.length($2) THEN n := SUBSTRING ($2 FROM (i + 1) FOR 1); SELECT INTO res CASE WHEN n = 'a' THEN pg_catalog.to_char($1, 'Dy') WHEN n = 'b' THEN pg_catalog.to_char($1, 'Mon') WHEN n = 'c' THEN pg_catalog.to_char($1, 'FMMM') WHEN n = 'D' THEN pg_catalog.to_char($1, 'FMDDth') WHEN n = 'd' THEN pg_catalog.to_char($1, 'DD') WHEN n = 'e' THEN pg_catalog.to_char($1, 'FMDD') WHEN n = 'f' THEN pg_catalog.to_char($1, 'US') WHEN n = 'H' THEN pg_catalog.to_char($1, 'HH24') WHEN n = 'h' THEN pg_catalog.to_char($1, 'HH12') WHEN n = 'I' THEN pg_catalog.to_char($1, 'HH12') WHEN n = 'i' THEN pg_catalog.to_char($1, 'MI') WHEN n = 'j' THEN pg_catalog.to_char($1, 'DDD') WHEN n = 'k' THEN pg_catalog.to_char($1, 'FMHH24') WHEN n = 'l' THEN pg_catalog.to_char($1, 'FMHH12') WHEN n = 'M' THEN pg_catalog.to_char($1, 'FMMonth') WHEN n = 'm' THEN pg_catalog.to_char($1, 'MM') WHEN n = 'p' THEN pg_catalog.to_char($1, 'AM') WHEN n = 'r' THEN pg_catalog.to_char($1, 'HH12:MI:SS AM') WHEN n = 'S' THEN pg_catalog.to_char($1, 'SS') WHEN n = 's' THEN pg_catalog.to_char($1, 'SS') WHEN n = 'T' THEN pg_catalog.to_char($1, 'HH24:MI:SS') WHEN n = 'U' THEN pg_catalog.to_char($1, '?') WHEN n = 'u' THEN pg_catalog.to_char($1, '?') WHEN n = 'V' THEN pg_catalog.to_char($1, '?') WHEN n = 'v' THEN pg_catalog.to_char($1, '?') WHEN n = 'W' THEN pg_catalog.to_char($1, 'FMDay') WHEN n = 'w' THEN EXTRACT(DOW FROM $1)::text WHEN n = 'X' THEN pg_catalog.to_char($1, '?') WHEN n = 'x' THEN pg_catalog.to_char($1, '?') WHEN n = 'Y' THEN pg_catalog.to_char($1, 'YYYY') WHEN n = 'y' THEN pg_catalog.to_char($1, 'YY') WHEN n = '%' THEN pg_catalog.to_char($1, '%') ELSE NULL END; temp := temp operator(pg_catalog.||) res; i := i + 2; ELSE temp = temp operator(pg_catalog.||) c; i := i + 1; END IF; END LOOP; RETURN temp; END $$ IMMUTABLE STRICT LANGUAGE plpgsql;
|
CREATE OR REPLACE FUNCTION date_format(timestamp without time zone, text) RETURNS text AS $$ DECLARE i int := 1; temp text := ''; c text; n text; res text; BEGIN WHILE i <= pg_catalog.length($2) LOOP c := SUBSTRING ($2 FROM i FOR 1); IF c = '%' AND i != pg_catalog.length($2) THEN n := SUBSTRING ($2 FROM (i + 1) FOR 1); SELECT INTO res CASE WHEN n = 'a' THEN pg_catalog.to_char($1, 'Dy') WHEN n = 'b' THEN pg_catalog.to_char($1, 'Mon') WHEN n = 'c' THEN pg_catalog.to_char($1, 'FMMM') WHEN n = 'D' THEN pg_catalog.to_char($1, 'FMDDth') WHEN n = 'd' THEN pg_catalog.to_char($1, 'DD') WHEN n = 'e' THEN pg_catalog.to_char($1, 'FMDD') WHEN n = 'f' THEN pg_catalog.to_char($1, 'US') WHEN n = 'H' THEN pg_catalog.to_char($1, 'HH24') WHEN n = 'h' THEN pg_catalog.to_char($1, 'HH12') WHEN n = 'I' THEN pg_catalog.to_char($1, 'HH12') WHEN n = 'i' THEN pg_catalog.to_char($1, 'MI') WHEN n = 'j' THEN pg_catalog.to_char($1, 'DDD') WHEN n = 'k' THEN pg_catalog.to_char($1, 'FMHH24') WHEN n = 'l' THEN pg_catalog.to_char($1, 'FMHH12') WHEN n = 'M' THEN pg_catalog.to_char($1, 'FMMonth') WHEN n = 'm' THEN pg_catalog.to_char($1, 'MM') WHEN n = 'p' THEN pg_catalog.to_char($1, 'AM') WHEN n = 'r' THEN pg_catalog.to_char($1, 'HH12:MI:SS AM') WHEN n = 'S' THEN pg_catalog.to_char($1, 'SS') WHEN n = 's' THEN pg_catalog.to_char($1, 'SS') WHEN n = 'T' THEN pg_catalog.to_char($1, 'HH24:MI:SS') WHEN n = 'U' THEN pg_catalog.to_char($1, '?') WHEN n = 'u' THEN pg_catalog.to_char($1, '?') WHEN n = 'V' THEN pg_catalog.to_char($1, '?') WHEN n = 'v' THEN pg_catalog.to_char($1, '?') WHEN n = 'W' THEN pg_catalog.to_char($1, 'FMDay') WHEN n = 'w' THEN EXTRACT(DOW FROM $1)::text WHEN n = 'X' THEN pg_catalog.to_char($1, '?') WHEN n = 'x' THEN pg_catalog.to_char($1, '?') WHEN n = 'Y' THEN pg_catalog.to_char($1, 'YYYY') WHEN n = 'y' THEN pg_catalog.to_char($1, 'YY') WHEN n = '%' THEN pg_catalog.to_char($1, '%') ELSE NULL END; temp := temp operator(pg_catalog.||) res; i := i + 2; ELSE temp = temp operator(pg_catalog.||) c; i := i + 1; END IF; END LOOP; RETURN temp; END $$ IMMUTABLE STRICT LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
DROP FUNCTION date_format(timestamp with time zone,text);
|
||||||
CREATE OR REPLACE FUNCTION date_format(timestamp with time zone, text) RETURNS text AS $$ DECLARE i int := 1; temp text := ''; c text; n text; res text; BEGIN WHILE i <= pg_catalog.length($2) LOOP c := SUBSTRING ($2 FROM i FOR 1); IF c = '%' AND i != pg_catalog.length($2) THEN n := SUBSTRING ($2 FROM (i + 1) FOR 1); SELECT INTO res CASE WHEN n = 'a' THEN pg_catalog.to_char($1, 'Dy') WHEN n = 'b' THEN pg_catalog.to_char($1, 'Mon') WHEN n = 'c' THEN pg_catalog.to_char($1, 'FMMM') WHEN n = 'D' THEN pg_catalog.to_char($1, 'FMDDth') WHEN n = 'd' THEN pg_catalog.to_char($1, 'DD') WHEN n = 'e' THEN pg_catalog.to_char($1, 'FMDD') WHEN n = 'f' THEN pg_catalog.to_char($1, 'US') WHEN n = 'H' THEN pg_catalog.to_char($1, 'HH24') WHEN n = 'h' THEN pg_catalog.to_char($1, 'HH12') WHEN n = 'I' THEN pg_catalog.to_char($1, 'HH12') WHEN n = 'i' THEN pg_catalog.to_char($1, 'MI') WHEN n = 'j' THEN pg_catalog.to_char($1, 'DDD') WHEN n = 'k' THEN pg_catalog.to_char($1, 'FMHH24') WHEN n = 'l' THEN pg_catalog.to_char($1, 'FMHH12') WHEN n = 'M' THEN pg_catalog.to_char($1, 'FMMonth') WHEN n = 'm' THEN pg_catalog.to_char($1, 'MM') WHEN n = 'p' THEN pg_catalog.to_char($1, 'AM') WHEN n = 'r' THEN pg_catalog.to_char($1, 'HH12:MI:SS AM') WHEN n = 'S' THEN pg_catalog.to_char($1, 'SS') WHEN n = 's' THEN pg_catalog.to_char($1, 'SS') WHEN n = 'T' THEN pg_catalog.to_char($1, 'HH24:MI:SS') WHEN n = 'U' THEN pg_catalog.to_char($1, '?') WHEN n = 'u' THEN pg_catalog.to_char($1, '?') WHEN n = 'V' THEN pg_catalog.to_char($1, '?') WHEN n = 'v' THEN pg_catalog.to_char($1, '?') WHEN n = 'W' THEN pg_catalog.to_char($1, 'FMDay') WHEN n = 'w' THEN EXTRACT(DOW FROM $1)::text WHEN n = 'X' THEN pg_catalog.to_char($1, '?') WHEN n = 'x' THEN pg_catalog.to_char($1, '?') WHEN n = 'Y' THEN pg_catalog.to_char($1, 'YYYY') WHEN n = 'y' THEN pg_catalog.to_char($1, 'YY') WHEN n = '%' THEN pg_catalog.to_char($1, '%') ELSE NULL END; temp := temp operator(pg_catalog.||) res; i := i + 2; ELSE temp = temp operator(pg_catalog.||) c; i := i + 1; END IF; END LOOP; RETURN temp; END $$ IMMUTABLE STRICT LANGUAGE plpgsql;
|
CREATE OR REPLACE FUNCTION date_format(timestamp with time zone, text) RETURNS text AS $$ DECLARE i int := 1; temp text := ''; c text; n text; res text; BEGIN WHILE i <= pg_catalog.length($2) LOOP c := SUBSTRING ($2 FROM i FOR 1); IF c = '%' AND i != pg_catalog.length($2) THEN n := SUBSTRING ($2 FROM (i + 1) FOR 1); SELECT INTO res CASE WHEN n = 'a' THEN pg_catalog.to_char($1, 'Dy') WHEN n = 'b' THEN pg_catalog.to_char($1, 'Mon') WHEN n = 'c' THEN pg_catalog.to_char($1, 'FMMM') WHEN n = 'D' THEN pg_catalog.to_char($1, 'FMDDth') WHEN n = 'd' THEN pg_catalog.to_char($1, 'DD') WHEN n = 'e' THEN pg_catalog.to_char($1, 'FMDD') WHEN n = 'f' THEN pg_catalog.to_char($1, 'US') WHEN n = 'H' THEN pg_catalog.to_char($1, 'HH24') WHEN n = 'h' THEN pg_catalog.to_char($1, 'HH12') WHEN n = 'I' THEN pg_catalog.to_char($1, 'HH12') WHEN n = 'i' THEN pg_catalog.to_char($1, 'MI') WHEN n = 'j' THEN pg_catalog.to_char($1, 'DDD') WHEN n = 'k' THEN pg_catalog.to_char($1, 'FMHH24') WHEN n = 'l' THEN pg_catalog.to_char($1, 'FMHH12') WHEN n = 'M' THEN pg_catalog.to_char($1, 'FMMonth') WHEN n = 'm' THEN pg_catalog.to_char($1, 'MM') WHEN n = 'p' THEN pg_catalog.to_char($1, 'AM') WHEN n = 'r' THEN pg_catalog.to_char($1, 'HH12:MI:SS AM') WHEN n = 'S' THEN pg_catalog.to_char($1, 'SS') WHEN n = 's' THEN pg_catalog.to_char($1, 'SS') WHEN n = 'T' THEN pg_catalog.to_char($1, 'HH24:MI:SS') WHEN n = 'U' THEN pg_catalog.to_char($1, '?') WHEN n = 'u' THEN pg_catalog.to_char($1, '?') WHEN n = 'V' THEN pg_catalog.to_char($1, '?') WHEN n = 'v' THEN pg_catalog.to_char($1, '?') WHEN n = 'W' THEN pg_catalog.to_char($1, 'FMDay') WHEN n = 'w' THEN EXTRACT(DOW FROM $1)::text WHEN n = 'X' THEN pg_catalog.to_char($1, '?') WHEN n = 'x' THEN pg_catalog.to_char($1, '?') WHEN n = 'Y' THEN pg_catalog.to_char($1, 'YYYY') WHEN n = 'y' THEN pg_catalog.to_char($1, 'YY') WHEN n = '%' THEN pg_catalog.to_char($1, '%') ELSE NULL END; temp := temp operator(pg_catalog.||) res; i := i + 2; ELSE temp = temp operator(pg_catalog.||) c; i := i + 1; END IF; END LOOP; RETURN temp; END $$ IMMUTABLE STRICT LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2438,8 +2438,8 @@ class SupplierProposal extends CommonObject
|
|||||||
$sql.= ' pt.total_ht, pt.total_tva, pt.total_ttc, pt.fk_product_fournisseur_price as fk_fournprice, pt.buy_price_ht as pa_ht, pt.special_code, pt.localtax1_tx, pt.localtax2_tx,';
|
$sql.= ' pt.total_ht, pt.total_tva, pt.total_ttc, pt.fk_product_fournisseur_price as fk_fournprice, pt.buy_price_ht as pa_ht, pt.special_code, pt.localtax1_tx, pt.localtax2_tx,';
|
||||||
$sql.= ' pt.product_type, pt.rang, pt.fk_parent_line,';
|
$sql.= ' pt.product_type, pt.rang, pt.fk_parent_line,';
|
||||||
$sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,';
|
$sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,';
|
||||||
$sql.= ' p.description as product_desc, pt.ref_fourn as ref_produit_fourn';
|
$sql.= ' p.description as product_desc, pt.ref_fourn as ref_produit_fourn,';
|
||||||
$sql.= ' ,pt.fk_multicurrency, pt.multicurrency_code, pt.multicurrency_subprice, pt.multicurrency_total_ht, pt.multicurrency_total_tva, pt.multicurrency_total_ttc, pt.fk_unit';
|
$sql.= ' pt.fk_multicurrency, pt.multicurrency_code, pt.multicurrency_subprice, pt.multicurrency_total_ht, pt.multicurrency_total_tva, pt.multicurrency_total_ttc, pt.fk_unit';
|
||||||
$sql.= ' FROM '.MAIN_DB_PREFIX.'supplier_proposaldet as pt';
|
$sql.= ' FROM '.MAIN_DB_PREFIX.'supplier_proposaldet as pt';
|
||||||
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid';
|
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid';
|
||||||
$sql.= ' WHERE pt.fk_supplier_proposal = '.$this->id;
|
$sql.= ' WHERE pt.fk_supplier_proposal = '.$this->id;
|
||||||
@ -2826,8 +2826,8 @@ class SupplierProposalLine extends CommonObjectLine
|
|||||||
$sql.= ' subprice, remise_percent, ';
|
$sql.= ' subprice, remise_percent, ';
|
||||||
$sql.= ' info_bits, ';
|
$sql.= ' info_bits, ';
|
||||||
$sql.= ' total_ht, total_tva, total_localtax1, total_localtax2, total_ttc, fk_product_fournisseur_price, buy_price_ht, special_code, rang,';
|
$sql.= ' total_ht, total_tva, total_localtax1, total_localtax2, total_ttc, fk_product_fournisseur_price, buy_price_ht, special_code, rang,';
|
||||||
$sql.= ' ref_fourn';
|
$sql.= ' ref_fourn,';
|
||||||
$sql.= ', fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc, fk_unit)';
|
$sql.= ' fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc, fk_unit)';
|
||||||
$sql.= " VALUES (".$this->fk_supplier_proposal.",";
|
$sql.= " VALUES (".$this->fk_supplier_proposal.",";
|
||||||
$sql.= " ".($this->fk_parent_line>0?"'".$this->fk_parent_line."'":"null").",";
|
$sql.= " ".($this->fk_parent_line>0?"'".$this->fk_parent_line."'":"null").",";
|
||||||
$sql.= " ".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null").",";
|
$sql.= " ".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null").",";
|
||||||
@ -2860,7 +2860,7 @@ class SupplierProposalLine extends CommonObjectLine
|
|||||||
$sql.= ", ".$this->multicurrency_total_ht;
|
$sql.= ", ".$this->multicurrency_total_ht;
|
||||||
$sql.= ", ".$this->multicurrency_total_tva;
|
$sql.= ", ".$this->multicurrency_total_tva;
|
||||||
$sql.= ", ".$this->multicurrency_total_ttc;
|
$sql.= ", ".$this->multicurrency_total_ttc;
|
||||||
$sql.= ", fk_unit=".($this->fk_unit?$this->fk_unit:'null');
|
$sql.= ", ".($this->fk_unit?$this->fk_unit:'null');
|
||||||
$sql.= ')';
|
$sql.= ')';
|
||||||
|
|
||||||
dol_syslog(get_class($this).'::insert', LOG_DEBUG);
|
dol_syslog(get_class($this).'::insert', LOG_DEBUG);
|
||||||
|
|||||||
@ -141,7 +141,7 @@ class CodingSqlTest extends PHPUnit_Framework_TestCase
|
|||||||
$langs=$this->savlangs;
|
$langs=$this->savlangs;
|
||||||
$db=$this->savdb;
|
$db=$this->savdb;
|
||||||
|
|
||||||
$listofsqldir = array(DOL_DOCUMENT_ROOT.'/install/mysql/tables', DOL_DOCUMENT_ROOT.'/install/mysql/migration');
|
$listofsqldir = array(DOL_DOCUMENT_ROOT.'/install/mysql/data', DOL_DOCUMENT_ROOT.'/install/mysql/tables', DOL_DOCUMENT_ROOT.'/install/mysql/migration');
|
||||||
|
|
||||||
foreach ($listofsqldir as $dir)
|
foreach ($listofsqldir as $dir)
|
||||||
{
|
{
|
||||||
@ -160,6 +160,14 @@ class CodingSqlTest extends PHPUnit_Framework_TestCase
|
|||||||
print __METHOD__." Result for checking we don't have back quote = ".$result."\n";
|
print __METHOD__." Result for checking we don't have back quote = ".$result."\n";
|
||||||
$this->assertTrue($result===false, 'Found back quote into '.$file.'. Bad.');
|
$this->assertTrue($result===false, 'Found back quote into '.$file.'. Bad.');
|
||||||
|
|
||||||
|
$result=strpos($filecontent,'"');
|
||||||
|
if ($result)
|
||||||
|
{
|
||||||
|
$result=! strpos($filecontent,'["');
|
||||||
|
}
|
||||||
|
print __METHOD__." Result for checking we don't have double quote = ".$result."\n";
|
||||||
|
$this->assertTrue($result===false, 'Found double quote that is not [" (used for json content) into '.$file.'. Bad.');
|
||||||
|
|
||||||
$result=strpos($filecontent,'int(');
|
$result=strpos($filecontent,'int(');
|
||||||
print __METHOD__." Result for checking we don't have 'int(' instead of 'integer' = ".$result."\n";
|
print __METHOD__." Result for checking we don't have 'int(' instead of 'integer' = ".$result."\n";
|
||||||
$this->assertTrue($result===false, 'Found int(x) or tinyint(x) instead of integer or tinyint into '.$file.'. Bad.');
|
$this->assertTrue($result===false, 'Found int(x) or tinyint(x) instead of integer or tinyint into '.$file.'. Bad.');
|
||||||
@ -172,6 +180,11 @@ class CodingSqlTest extends PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
// Test for migration files only
|
// Test for migration files only
|
||||||
|
|
||||||
|
}
|
||||||
|
elseif ($dir == DOL_DOCUMENT_ROOT.'/install/mysql/data')
|
||||||
|
{
|
||||||
|
// Test for data files only
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user