Merge branch 'develop' into fix/accessdbresults

This commit is contained in:
Laurent Destailleur 2024-03-23 17:33:26 +01:00 committed by GitHub
commit 6b80889ca6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 1642 additions and 1098 deletions

View file

@ -68,7 +68,7 @@ jQuery jqueryFileTree 1.0.1 GPL and MIT License Yes
jQuery jquerytreeview 1.4.1 MIT License Yes JS library for filetree
jQuery TableDnD 0.6 GPL and MIT License Yes JS library plugin TableDnD (to reorder table rows)
jQuery Timepicker 1.1.0 GPL and MIT License Yes JS library Timepicker addon for Datepicker
jsGanttImproved 2.7.3 BSD License Yes JS library (to build Gantt reports)
jsGanttImproved 2.8.10 BSD License Yes JS library (to build Gantt reports)
SwaggerUI 2.2.10 GPL-2+ Yes JS library to offer the REST API explorer
Image libraries:

View file

@ -31,7 +31,7 @@ Replace:
d.items&&
With
d&&d.items&&
ESCPOS:
-------
@ -55,8 +55,8 @@ NUSOAP:
* Line 1257 of file nusoap.php. Add:
libxml_disable_entity_loader(true); // Avoid load of external entities (security problem). Required only for libxml < 2.
* Line 4346 of file nusoap.php
$rev = array();
@ -128,13 +128,13 @@ with
if (!@TCPDF_STATIC::file_exists($file)) {
// DOL CHANGE If we keep this, the image is not visible on pages after the first one.
//var_dump($file.' '.(!@TCPDF_STATIC::file_exists($file)));
//return false;
//return false;
$tfile = str_replace(' ', '%20', $file);
if (@TCPDF_STATIC::file_exists($tfile)) {
$file = $tfile;
}
}
* Replace in tcpdf.php:
if (($imgsrc[0] === '/') AND !empty($_SERVER['DOCUMENT_ROOT']) AND ($_SERVER['DOCUMENT_ROOT'] != '/')) {
with
@ -174,7 +174,7 @@ with
imagesetpixel($imgalpha, $xpx, $ypx, $alpha);
into
imagesetpixel($imgalpha, $xpx, $ypx, (int) $alpha);
* Removed useless directories ("examples", "tools")
* Optionally, removed all fonts except
@ -243,7 +243,7 @@ with:
with
foreach ($value[1] as $k => $v) {
* Fix by replacing
* Fix by replacing
if ($res[0] == PDF_TYPE_OBJECT)
with
if (isset($res[0]) && $res[0] == PDF_TYPE_OBJECT)
@ -253,23 +253,16 @@ with
JSGANTT:
--------
* Replace in function JSGantt.taskLink
var OpenWindow=window.open(pRef, "newwin", "height="+vHeight+",width="+vWidth);
window.open(pRef, 'newwin', 'height=' + vHeight + ',width=' + vWidth);
with
// LDR To open in same window
// @CHANGE DOLI To open in same window
//var OpenWindow=window.open(pRef, "newwin", "height="+vHeight+",width="+vWidth);
window.location.href=pRef
* Replace
vTmpDiv=this.newNode(vTmpCell, 'div', null, null, vTaskList[i].getResource());
with
var vTmpNode=this.newNode(vTmpCell, 'div', null, '');
vTmpNode=this.newNode(vTmpNode, 'a', null, '', vLangs[vLang]['moreinfo']);
vTmpNode.setAttribute('href',vTaskList[i].getLink());
* Replace '% Comp.' to have a smaller text column header
'comp':'% Comp.'
'comp': '%...'
with
'comp':'%'
'comp': '%'
@ -307,19 +300,19 @@ RESTLER:
// @CHANGE LDR
if (!is_string($haystack)) return false;
* Replace
* Replace
$loaders = array_unique(static::$rogueLoaders);
with
with
$loaders = array_unique(static::$rogueLoaders, SORT_REGULAR);
* Replace CommentParser.php line 423
elseif (count($value) && is_numeric($value[0]))
with
elseif (count($value) && isset($value[0]) && is_numeric($value[0]))
* Add CommentParser.php line 406 & 407 to remove a warning on api request in php 8.1
@ -417,5 +410,3 @@ Edit CSS to restore line removed between 4.0.5 and 4.0.6. It generates this bug:
.select2-hidden-accessible {
margin: -10000px !important; /* line to restore */
}

View file

@ -2650,9 +2650,7 @@ ProductsOrServicesTranslations
ProductsPipeServices
ProductsPricePerCustomer
ProfId10
ProfId10FR
ProfId10Short
ProfId10ShortFR
ProfId1ShortCM
ProfId1ShortFR
ProfId2ShortCM
@ -2663,14 +2661,15 @@ ProfId4ShortCM
ProfId4ShortFR
ProfId5ShortCM
ProfId5ShortFR
ProfId6ShortCM
ProfId6ShortFR
ProfId1Short
ProfId2Short
ProfId3Short
ProfId4Short
ProfId5Short
ProfId6Short
ProfId7Short
ProfId7ShortFR
ProfId8Short
ProfId8ShortFR
ProfId9Short
ProfId9ShortFR
ProformaBill
ProjectCreatedByEmailCollector
ProjectHasNoCategory

View file

@ -129,7 +129,7 @@ if [ -s "${MISSING_AND_UNUSED_FILE}" ] ; then
echo "## :warning: Unused Translations may match ->trans(\$key.'SomeString')."
echo "## You can add such dynamic keys to $(basename "$DYNAMIC_KEYS_SRC_FILE")"
echo "## so that they are ignored for this report."
echo "## :warning: Unused Translations may be commented in the code"
echo "## :warning: Unused Translations may also be commented in the code"
echo "## You can add such 'disabled' keys to $(basename "$EXCLUDE_KEYS_SRC_FILE")"
echo "## so that they are ignored for this report."
echo

View file

@ -44,7 +44,7 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'ac
$search_subaccount = GETPOST('search_subaccount', 'alpha');
$search_label = GETPOST('search_label', 'alpha');
$search_type = GETPOSTINT('search_type');
$search_type = GETPOST('search_type', 'intcomma');
// Security check
if ($user->socid > 0) {

View file

@ -652,7 +652,7 @@ print '</td></tr>';
if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid1">'.$langs->transcountry("ProfId1", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="siren" id="profid1" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_SIREN') ? $conf->global->MAIN_INFO_SIREN : '').'">';
print '<input name="siren" id="profid1" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_SIREN')).'">';
} else {
print $countrynotdefined;
}
@ -663,7 +663,7 @@ if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') {
if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid2">'.$langs->transcountry("ProfId2", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="siret" id="profid2" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_SIRET') ? $conf->global->MAIN_INFO_SIRET : '').'">';
print '<input name="siret" id="profid2" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_SIRET')).'">';
} else {
print $countrynotdefined;
}
@ -674,7 +674,7 @@ if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') {
if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid3">'.$langs->transcountry("ProfId3", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="ape" id="profid3" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_APE') ? $conf->global->MAIN_INFO_APE : '').'">';
print '<input name="ape" id="profid3" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_APE')).'">';
} else {
print $countrynotdefined;
}
@ -685,7 +685,7 @@ if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') {
if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid4">'.$langs->transcountry("ProfId4", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="rcs" id="profid4" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_RCS') ? $conf->global->MAIN_INFO_RCS : '').'">';
print '<input name="rcs" id="profid4" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_RCS')).'">';
} else {
print $countrynotdefined;
}
@ -696,7 +696,7 @@ if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') {
if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid5">'.$langs->transcountry("ProfId5", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="MAIN_INFO_PROFID5" id="profid5" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID5') ? $conf->global->MAIN_INFO_PROFID5 : '').'">';
print '<input name="MAIN_INFO_PROFID5" id="profid5" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID5')).'">';
} else {
print $countrynotdefined;
}
@ -707,7 +707,7 @@ if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') {
if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid6">'.$langs->transcountry("ProfId6", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="MAIN_INFO_PROFID6" id="profid6" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID6') ? $conf->global->MAIN_INFO_PROFID6 : '').'">';
print '<input name="MAIN_INFO_PROFID6" id="profid6" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID6')).'">';
} else {
print $countrynotdefined;
}
@ -716,9 +716,9 @@ if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') {
// ProfId7
if ($langs->transcountry("ProfId7", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid7">'.$langs->transcountry("profid7", $mysoc->country_code).'</label></td><td>';
print '<tr class="oddeven"><td><label for="profid7">'.$langs->transcountry("ProfId7", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="MAIN_INFO_PROFID7" id="profid7" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID7') ? $conf->global->MAIN_INFO_PROFID7 : '').'">';
print '<input name="MAIN_INFO_PROFID7" id="profid7" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID7')).'">';
} else {
print $countrynotdefined;
}
@ -727,9 +727,9 @@ if ($langs->transcountry("ProfId7", $mysoc->country_code) != '-') {
// ProfId8
if ($langs->transcountry("ProfId8", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid8">'.$langs->transcountry("profid8", $mysoc->country_code).'</label></td><td>';
print '<tr class="oddeven"><td><label for="profid8">'.$langs->transcountry("ProfId8", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="MAIN_INFO_PROFID8" id="profid8" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID8') ? $conf->global->MAIN_INFO_PROFID8 : '').'">';
print '<input name="MAIN_INFO_PROFID8" id="profid8" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID8')).'">';
} else {
print $countrynotdefined;
}
@ -738,9 +738,9 @@ if ($langs->transcountry("ProfId8", $mysoc->country_code) != '-') {
// ProfId9
if ($langs->transcountry("ProfId9", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid9">'.$langs->transcountry("profid9", $mysoc->country_code).'</label></td><td>';
print '<tr class="oddeven"><td><label for="profid9">'.$langs->transcountry("ProfId9", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="MAIN_INFO_PROFID9" id="profid9" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID9') ? $conf->global->MAIN_INFO_PROFID9 : '').'">';
print '<input name="MAIN_INFO_PROFID9" id="profid9" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID9')).'">';
} else {
print $countrynotdefined;
}
@ -749,9 +749,9 @@ if ($langs->transcountry("ProfId9", $mysoc->country_code) != '-') {
// ProfId10
if ($langs->transcountry("ProfId10", $mysoc->country_code) != '-') {
print '<tr class="oddeven"><td><label for="profid10">'.$langs->transcountry("profid10", $mysoc->country_code).'</label></td><td>';
print '<tr class="oddeven"><td><label for="profid10">'.$langs->transcountry("ProfId10", $mysoc->country_code).'</label></td><td>';
if (!empty($mysoc->country_code)) {
print '<input name="MAIN_INFO_PROFID10" id="profid10" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID10') ? $conf->global->MAIN_INFO_PROFID10 : '').'">';
print '<input name="MAIN_INFO_PROFID10" id="profid10" class="minwidth200" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_INFO_PROFID10')).'">';
} else {
print $countrynotdefined;
}

View file

@ -1271,7 +1271,7 @@ class FormOther
$selectboxlist .= '<input type="hidden" name="userid" value="'.$user->id.'">';
$selectboxlist .= '<input type="hidden" name="areacode" value="'.$areacode.'">';
$selectboxlist .= '<input type="hidden" name="boxorder" value="'.$boxorder.'">';
$selectboxlist .= Form::selectarray('boxcombo', $arrayboxtoactivatelabel, -1, $langs->trans("ChooseBoxToAdd").'...', 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth150onsmartphone hideonprint', 0, 'hidden selected', 0, 0);
$selectboxlist .= Form::selectarray('boxcombo', $arrayboxtoactivatelabel, -1, $langs->trans("ChooseBoxToAdd").'...', 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth300 hideonprint', 0, 'hidden selected', 0, 0);
if (empty($conf->use_javascript_ajax)) {
$selectboxlist .= ' <input type="submit" class="button" value="'.$langs->trans("AddBox").'">';
}

View file

@ -7648,7 +7648,11 @@ function dol_string_onlythesehtmlattributes($stringtoclean, $allowed_attributes
// Warning: loadHTML does not support HTML5 on old libxml versions.
$dom = new DOMDocument('', 'UTF-8');
// If $stringtoclean is wrong, it will generates warnings. So we disable warnings and restore them later.
$savwarning = error_reporting();
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
$dom->loadHTML($stringtoclean, LIBXML_ERR_NONE | LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NONET | LIBXML_NOWARNING | LIBXML_NOXMLDECL);
error_reporting($savwarning);
if ($dom instanceof DOMDocument) {
for ($els = $dom->getElementsByTagname('*'), $i = $els->length - 1; $i >= 0; $i--) {

View file

@ -123,7 +123,7 @@ class mod_codecompta_digitaria extends ModeleAccountancyCode
$texte = str_replace(array('{s1}', '{s2}', '{s3}', '{s4}'), array($s1, $s2, $s3, $s4), $texte);
$texte .= "<br>\n";
// Remove special char if COMPANY_DIGITARIA_REMOVE_SPECIAL is set to 1 or not set (default)
if (!isset($conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL) || !empty($conf->global->$conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL)) {
if (!isset($conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL) || !empty($conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL)) {
$texte .= $langs->trans('RemoveSpecialChars').' = '.yn(1)."<br>\n";
}
// Apply a regex replacement pattern on code if COMPANY_DIGITARIA_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed.

View file

@ -103,7 +103,7 @@ if (!$sortfield) {
$sall = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'));
$search_ref = GETPOST('search_ref', 'alpha');
$search_user = GETPOSTINT('search_user');
$search_user = GETPOST('search_user', 'intcomma');
$search_amount_ht = GETPOST('search_amount_ht', 'alpha');
$search_amount_vat = GETPOST('search_amount_vat', 'alpha');
$search_amount_ttc = GETPOST('search_amount_ttc', 'alpha');

View file

@ -451,7 +451,7 @@ if ($action == 'confirm_deleteline' && $confirm == 'yes' && $permissiontoreceive
}
// Update a dispatched line
if ($action == 'updateline' && $permissiontoreceive) {
if ($action == 'updateline' && $permissiontoreceive && empty($cancel)) {
$db->begin();
$error = 0;

View file

@ -2,7 +2,7 @@
div.gantt {
font-family: tahoma, arial, verdana, Sans-serif;
font-size: 10px;
font-size: 12px;
color: #656565;
}
@ -31,10 +31,9 @@ div.gantt {
font-size: 12px;
border: #efefef 1px solid;
text-align: center;
cursor: default
cursor: default;
}
.gtasklist {
height: 19px;
min-width: 5px;
@ -44,7 +43,7 @@ div.gantt {
border-right: none;
}
.gtasknolist-label{
.gtasknolist-label {
padding: 10px 50px;
}
/* all three width values set just to make sure - helps resizing code */
@ -56,7 +55,7 @@ div.gantt {
.gminorheading {
background-color: #ffffff;
font-weight: bold;
font-size: 9px;
font-size: 11px;
white-space: nowrap;
}
@ -154,9 +153,9 @@ td.gspanning {
.gtaskname {
min-width: 170px;
max-width: 170px;
width: 170px;
font-size: 9px;
max-width: 220px;
width: 220px;
font-size: 12px;
border-left: none;
}
@ -246,6 +245,11 @@ span.gfoldercollapse {
background-color: #fffde5;
}
.gitemdifferent td {
background-image: none;
background-color: rgba(0, 0, 0, 0.05);
}
/* task bar caption text styles */
.gmilecaption,
@ -487,7 +491,7 @@ span.gfoldercollapse {
div.gtaskbarcontainer {
z-index: 1;
position: absolute;
top: 0px
top: 0px;
}
.textbar {
@ -510,7 +514,7 @@ div.gtaskbarcontainer {
font-size: 10px;
display: block;
background: #ffffff;
color: #656565
color: #656565;
}
.gTaskInfo {
@ -652,7 +656,7 @@ div.gtaskbarcontainer {
/* Old Internet Explorer version hacks */
.gantt {
_height: 100%
_height: 100%;
}
/* otherwise the chart disappears! */
@ -777,7 +781,6 @@ td.gspanning div {
}
@media print {
/* All your print styles go here */
html,
.gchartgrid {
@ -787,6 +790,32 @@ td.gspanning div {
.glistgrid {
float: none !important;
}
/* Hide scrollbar for Chrome, Safari and Opera */
.gchartcontainer *::-webkit-scrollbar {
display: none;
}
/* Hide scrollbar for IE, Edge and Firefox */
.gchartcontainer * {
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
/* Hide tool-tip */
.JSGanttToolTip {
display: none !important;
}
/* This is the default css, injected by the JSGantt.printChart(width,height); function -->
@page {
size: ${width}mm ${height}mm;
}
.gchartcontainer {
width: ${width}mm;
}
<-- This will be injected by the JSGantt.printChart() function */
}
/* if using setUseSingleCell(1) the following is a suggested set of CSS3 styles to recreate the table grid - won't work on old browsers
@ -812,16 +841,21 @@ td.gspanning div {
display: flex;
flex-direction: column;
/* Allow resize */
resize: horizontal;
}
.gmainright {
overflow: hidden;
flex: auto;
flex: 1 1 auto;
}
.gmainleft {
overflow: hidden;
flex: 0 0 50%;
flex: 0 0 20%;
min-width: 220px;
/* Allow side to grow and shrink */
flex: 1 0 auto;
}
.gtasktableh tr,
@ -927,25 +961,25 @@ td.gspanning div {
}
table {
page-break-after: auto
page-break-after: auto;
}
tr {
page-break-inside: avoid;
page-break-after: auto
page-break-after: auto;
}
td {
page-break-inside: avoid;
page-break-after: auto
page-break-after: auto;
}
thead {
display: table-header-group
display: table-header-group;
}
tfoot {
display: table-footer-group
display: table-footer-group;
}
}
@ -966,7 +1000,7 @@ td.gspanning div {
border-radius: 8px;
border: 2px solid white;
/* should match background, can't be transparent */
background-color: rgba(0, 0, 0, .5);
background-color: rgba(0, 0, 0, 0.5);
}
.frame::-webkit-scrollbar-track {
@ -979,4 +1013,4 @@ td.gspanning div {
overflow: scroll;
-ms-overflow-style: scrollbar;
display: block;
}
}

File diff suppressed because it is too large Load diff

View file

@ -135,180 +135,97 @@ ProfId9=Professional ID 9
ProfId10=Professional ID 10
ProfId1AR=Prof Id 1 (CUIT/CUIL)
ProfId2AR=Prof Id 2 (Revenu brutes)
ProfId3AR=-
ProfId4AR=-
ProfId5AR=-
ProfId6AR=-
ProfId1AT=Prof Id 1 (USt.-IdNr)
ProfId2AT=Prof Id 2 (USt.-Nr)
ProfId3AT=Prof Id 3 (Handelsregister-Nr.)
ProfId4AT=-
ProfId5AT=EORI number
ProfId6AT=-
ProfId1AU=Prof Id 1 (ABN)
ProfId2AU=-
ProfId3AU=-
ProfId4AU=-
ProfId5AU=-
ProfId6AU=-
ProfId1BE=Prof Id 1 (Professional number)
ProfId2BE=-
ProfId3BE=-
ProfId4BE=-
ProfId5BE=EORI number
ProfId6BE=-
ProfId1BR=-
ProfId2BR=IE (Inscricao Estadual)
ProfId3BR=IM (Inscricao Municipal)
ProfId4BR=CPF
#ProfId5BR=CNAE
#ProfId6BR=INSS
ProfId1CH=UID-Nummer
ProfId2CH=-
ProfId3CH=Prof Id 1 (Federal number)
ProfId4CH=Prof Id 2 (Commercial Record number)
ProfId5CH=EORI number
ProfId6CH=-
ProfId1CL=Prof Id 1 (R.U.T.)
ProfId2CL=-
ProfId3CL=-
ProfId4CL=-
ProfId5CL=-
ProfId6CL=-
ProfId1CM=Id. prof. 1 (Trade Register)
ProfId2CM=Id. prof. 2 (Taxpayer No.)
ProfId3CM=Id. prof. 3 (No. of Creation decree)
ProfId4CM=Id. prof. 4 (No. of Deposit certificate)
ProfId5CM=Id. prof. 5 (Others)
ProfId6CM=-
ProfId1ShortCM=Trade Register
ProfId2ShortCM=Taxpayer No.
ProfId3ShortCM=No. of Creation decree
ProfId4ShortCM=No. of Deposit certificate
ProfId5ShortCM=Others
ProfId6ShortCM=-
ProfId1CO=Prof Id 1 (R.U.T.)
ProfId2CO=-
ProfId3CO=-
ProfId4CO=-
ProfId5CO=-
ProfId6CO=-
ProfId1DE=Prof Id 1 (USt.-IdNr)
ProfId2DE=Prof Id 2 (USt.-Nr)
ProfId3DE=Prof Id 3 (Handelsregister-Nr.)
ProfId4DE=-
ProfId5DE=EORI number
ProfId6DE=-
ProfId1ES=Prof Id 1 (CIF/NIF)
ProfId2ES=Prof Id 2 (Social security number)
ProfId3ES=Prof Id 3 (CNAE)
ProfId4ES=Prof Id 4 (Collegiate number)
ProfId5ES=Prof Id 5 (EORI number)
ProfId6ES=-
ProfId1FR=Prof Id 1 (SIREN)
ProfId2FR=Prof Id 2 (SIRET)
ProfId3FR=Prof Id 3 (NAF, old APE)
ProfId4FR=Prof Id 4 (RCS/RM)
ProfId5FR=Prof Id 5 (numéro EORI)
ProfId6FR=-
ProfId7FR=-
ProfId8FR=-
ProfId9FR=-
ProfId10FR=-
ProfId1ShortFR=SIREN
ProfId2ShortFR=SIRET
ProfId3ShortFR=NAF
ProfId4ShortFR=RCS
ProfId5ShortFR=EORI
ProfId6ShortFR=-
ProfId7ShortFR=-
ProfId8ShortFR=-
ProfId9ShortFR=-
ProfId10ShortFR=-
ProfId1GB=Registration Number
ProfId2GB=-
ProfId3GB=SIC
ProfId4GB=-
ProfId5GB=-
ProfId6GB=-
ProfId1HN=Id prof. 1 (RTN)
ProfId2HN=-
ProfId3HN=-
ProfId4HN=-
ProfId5HN=-
ProfId6HN=-
ProfId1IN=Prof Id 1 (TIN)
ProfId2IN=Prof Id 2 (PAN)
ProfId3IN=Prof Id 3 (SRVC TAX)
ProfId4IN=Prof Id 4
ProfId5IN=Prof Id 5
ProfId6IN=-
ProfId1IT=-
ProfId2IT=-
ProfId3IT=-
ProfId4IT=-
ProfId5IT=EORI number
ProfId6IT=-
ProfId1LU=Id. prof. 1 (R.C.S. Luxembourg)
ProfId2LU=Id. prof. 2 (Business permit)
ProfId3LU=-
ProfId4LU=-
ProfId5LU=EORI number
ProfId6LU=-
ProfId1MA=Id prof. 1 (R.C.)
ProfId2MA=Id prof. 2 (Patente)
ProfId3MA=Id prof. 3 (I.F.)
ProfId4MA=Id prof. 4 (C.N.S.S.)
ProfId5MA=Id prof. 5 (I.C.E.)
ProfId6MA=-
ProfId1MX=Prof Id 1 (R.F.C).
ProfId2MX=Prof Id 2 (R..P. IMSS)
ProfId3MX=Prof Id 3 (Professional Charter)
ProfId4MX=-
ProfId5MX=-
ProfId6MX=-
ProfId1NL=KVK nummer
ProfId2NL=-
ProfId3NL=-
ProfId4NL=Burgerservicenummer (BSN)
ProfId5NL=EORI number
ProfId6NL=-
ProfId1PT=Prof Id 1 (NIPC)
ProfId2PT=Prof Id 2 (Social security number)
ProfId3PT=Prof Id 3 (Commercial Record number)
ProfId4PT=Prof Id 4 (Conservatory)
ProfId5PT=Prof Id 5 (EORI number)
ProfId6PT=-
ProfId1SN=RC
ProfId2SN=NINEA
ProfId3SN=-
ProfId4SN=-
ProfId5SN=-
ProfId6SN=-
ProfId1TN=Prof Id 1 (RC)
ProfId2TN=Prof Id 2 (Fiscal matricule)
ProfId3TN=Prof Id 3 (Douane code)
ProfId4TN=Prof Id 4 (BAN)
ProfId5TN=-
ProfId6TN=-
ProfId1US=Prof Id (FEIN)
ProfId2US=-
ProfId3US=-
ProfId4US=-
ProfId5US=-
ProfId6US=-
ProfId1RO=Prof Id 1 (CUI)
ProfId2RO=Prof Id 2 (Nr. Înmatriculare)
ProfId3RO=Prof Id 3 (CAEN)
ProfId4RO=Prof Id 5 (EUID)
ProfId5RO=Prof Id 5 (EORI number)
ProfId6RO=-
ProfId1RU=Prof Id 1 (OGRN)
ProfId2RU=Prof Id 2 (INN)
ProfId3RU=Prof Id 3 (KPP)
ProfId4RU=Prof Id 4 (OKPO)
ProfId5RU=-
ProfId6RU=-
ProfId1UA=Prof Id 1 (EDRPOU)
ProfId2UA=Prof Id 2 (DRFO)
ProfId3UA=Prof Id 3 (INN)

View file

@ -64,6 +64,8 @@ $enddate = dol_mktime(23, 59, 59, GETPOSTINT('enddatemonth'), GETPOSTINT('enddat
$search_ref = GETPOST('search_ref', 'alpha');
$hookmanager->initHooks(array('checkmarginlist'));
// Security check
$result = restrictedArea($user, 'margins');

View file

@ -204,7 +204,7 @@ function constructGanttLine($tarr, $task, $task_dependencies, $level = 0, $proje
//$parent = $task["task_parent"];
}
// Define percent
$percent = $task['task_percent_complete'] ? $task['task_percent_complete'] : 0;
$percent = empty($task['task_percent_complete']) ? 0 : $task['task_percent_complete'];
// Link (more information)
if ($task["task_id"] < 0) {
//$link=DOL_URL_ROOT.'/projet/tasks.php?withproject=1&id='.abs($task["task_id"]);
@ -264,9 +264,9 @@ function constructGanttLine($tarr, $task, $task_dependencies, $level = 0, $proje
$taskid = $task["task_alternate_id"];
//$taskid = $task['task_id'];
$note = $task['note'];
$note = empty($task['note']) ? '' : $task['note'];
$note = dol_concatdesc($note, $langs->trans("Workload").' : '.($task['task_planned_workload'] ? convertSecondToTime($task['task_planned_workload'], 'allhourmin') : ''));
$note = dol_concatdesc($note, $langs->trans("Workload").' : '.(empty($task['task_planned_workload']) ? '' : convertSecondToTime($task['task_planned_workload'], 'allhourmin')));
$s .= "g.AddTaskItem(new JSGantt.TaskItem('".$taskid."', '".dol_escape_js(trim($name))."', '".$start_date."', '".$end_date."', '".$css."', '".$link."', ".$task['task_milestone'].", '".dol_escape_js($resources)."', ".($percent >= 0 ? $percent : 0).", ".$line_is_auto_group.", '".$parent."', 1, '".$dependency."', '".(empty($task["task_is_group"]) ? (($percent >= 0 && $percent != '') ? $percent.'%' : '') : '')."', '".dol_escape_js($note)."', g));";
echo $s;

View file

@ -356,7 +356,7 @@ if (count($tasksarray) > 0) {
//if ($s) $tasks[$taskcursor]['task_resources']=implode(',',$idofusers);
$tasks[$taskcursor]['task_resources'] = $s;
if ($s) {
$tasks[$taskcursor]['task_resources'] = '<a href="'.DOL_URL_ROOT.'/projet/tasks/contact.php?id='.$val->id.'&withproject=1" title="'.dol_escape_htmltag($s).'">'.$langs->trans("List").'</a>';
$tasks[$taskcursor]['task_resources'] = '<a href="'.DOL_URL_ROOT.'/projet/tasks/contact.php?id='.$val->id.'&withproject=1" title="'.dol_escape_htmltag($s).'">'.$langs->trans("Contacts").'</a>';
}
//print "xxx".$val->id.$tasks[$taskcursor]['task_resources'];
$tasks[$taskcursor]['note'] = $task->note_public;

View file

@ -413,7 +413,7 @@ if ($id > 0 || !empty($ref)) {
print '<td>';
$formcompany->selectTypeContact($object, '', 'type', 'internal', 'position');
print '</td>';
print '<td class="right" colspan="3" ><input type="submit" class="button button-add" value="'.$langs->trans("Add").'" name="addsourceinternal"></td>';
print '<td class="right" colspan="3" ><input type="submit" class="button button-add small" value="'.$langs->trans("Add").'" name="addsourceinternal"></td>';
print '</tr>';
// Line to add an external contact. Only if project linked to a third party.
@ -438,7 +438,7 @@ if ($id > 0 || !empty($ref)) {
print '<td>';
$formcompany->selectTypeContact($object, '', 'typecontact', 'external', 'position');
print '</td>';
print '<td class="right" colspan="3" ><input type="submit" class="button" id="add-customer-contact" name="addsourceexternal" value="'.$langs->trans("Add").'"';
print '<td class="right" colspan="3" ><input type="submit" class="button button-add small" id="add-customer-contact" name="addsourceexternal" value="'.$langs->trans("Add").'"';
if (!$nbofcontacts) {
print ' disabled';
}

View file

@ -1539,9 +1539,11 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($canvasdisplayactio
$i = 1;
$j = 0;
$NBCOLS = ($conf->browser->layout == 'phone' ? 1 : 2);
while ($i <= 6) {
$NBPROFIDMIN = getDolGlobalInt('THIRDPARTY_MIN_NB_PROF_ID', 2);
$NBPROFIDMAX = getDolGlobalInt('THIRDPARTY_MAX_NB_PROF_ID', 6);
while ($i <= $NBPROFIDMAX) {
$idprof = $langs->transcountry('ProfId'.$i, $object->country_code);
if ($idprof != '-') {
if ($idprof != '-' && ($i <= $NBPROFIDMIN || !empty($langs->tab_translate['ProfId'.$i.$object->country_code]))) {
$key = 'idprof'.$i;
if (($j % $NBCOLS) == 0) {
@ -2281,9 +2283,11 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($canvasdisplayactio
$i = 1;
$j = 0;
$NBCOLS = ($conf->browser->layout == 'phone' ? 1 : 2);
while ($i <= 6) {
$NBPROFIDMIN = getDolGlobalInt('THIRDPARTY_MIN_NB_PROF_ID', 2);
$NBPROFIDMAX = getDolGlobalInt('THIRDPARTY_MAX_NB_PROF_ID', 6);
while ($i <= $NBPROFIDMAX) {
$idprof = $langs->transcountry('ProfId'.$i, $object->country_code);
if ($idprof != '-') {
if ($idprof != '-' && ($i <= $NBPROFIDMIN || !empty($langs->tab_translate['ProfId'.$i.$object->country_code]))) {
$key = 'idprof'.$i;
if (($j % $NBCOLS) == 0) {
@ -2705,10 +2709,11 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($canvasdisplayactio
// Prof ids
$i = 1;
$j = 0;
while ($i <= 6) {
$NBPROFIDMIN = getDolGlobalInt('THIRDPARTY_MIN_NB_PROF_ID', 2);
$NBPROFIDMAX = getDolGlobalInt('THIRDPARTY_MAX_NB_PROF_ID', 6);
while ($i <= $NBPROFIDMAX) {
$idprof = $langs->transcountry('ProfId'.$i, $object->country_code);
if ($idprof != '-') {
//if (($j % 2) == 0) print '<tr>';
if ($idprof != '-' && ($i <= $NBPROFIDMIN || !empty($langs->tab_translate['ProfId'.$i.$object->country_code]))) {
print '<tr>';
print '<td>'.$idprof.'</td><td>';
$key = 'idprof'.$i;
@ -2723,13 +2728,11 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($canvasdisplayactio
}
}
print '</td>';
//if (($j % 2) == 1) print '</tr>';
print '</tr>';
$j++;
}
$i++;
}
//if ($j % 2 == 1) print '<td colspan="2"></td></tr>';
// This fields are used to know VAT to include in an invoice when the thirdparty is making a sale, so when it is a supplier.

View file

@ -3961,6 +3961,13 @@ table.liste tr:last-of-type td, table.noborder:not(#tablelines):not(#tableliness
border-bottom-color: var(--colortopbordertitle1);
border-bottom-style: solid;
}
/* CSS to remove the interline border */
table.nointerlines tr:not(:last-child) td {
border-bottom: unset !important;
border-top: unset !important;
}
/*
div.tabBar div.fichehalfright table.noborder:not(.margintable):not(.paymenttable):not(.lastrecordtable):last-of-type {
border-bottom: 1px solid var(--colortopbordertitle1);
@ -4019,10 +4026,10 @@ table.liste tr, table.noborder tr, div.noborder form {
min-height: 20px;
}
table.liste th, table.noborder th, table.noborder tr.liste_titre td, table.noborder tr.box_titre td {
padding: 7px 8px 7px 8px; /* t r b l */
padding: 7px 10px 7px 12px; /* t r b l */
}
table.liste td, table.noborder td, div.noborder form div, table.tableforservicepart1 td, table.tableforservicepart2 td {
padding: 8px 6px 8px 6px; /* t r b l */
padding: 8px 10px 8px 12px; /* t r b l */
/* line-height: 22px; This create trouble on cell login on list of last events of a contract*/
height: 22px;
}
@ -6074,7 +6081,7 @@ td.gminorheading {
}*/
.gtaskname div, .gtaskname {
min-width: 250px !important;
max-width: unset !important;
max-width: 500px !important;
width: unset !important;
}
.gpccomplete div, .gpccomplete {

View file

@ -4086,6 +4086,11 @@ table.paddingtopbottomonly tr td {
padding-top: 1px;
padding-bottom: 2px;
}
/* CSS to remove the interline border */
table.nointerlines tr:not(:last-child) td {
border-bottom: unset !important;
border-top: unset !important;
}
.liste_titre_filter {
background: var(--colorbacktitle1) !important;
@ -4117,11 +4122,11 @@ tr#trlinefordates td {
}
table.liste th, table.noborder th, table.noborder tr.liste_titre td, table.noborder tr.box_titre td {
padding: 8px 6px 8px 6px; /* t r b l */
padding: 8px 8px 8px 10px; /* t r b l */
}
table.liste td, table.noborder td, div.noborder form div, table.tableforservicepart1 td, table.tableforservicepart2 td {
padding: 4px 6px 4px 6px; /* t r b l */
padding: 4px 8px 4px 10px; /* t r b l */
height: 22px;
}
table.liste tr.trkanban td {

View file

@ -85,19 +85,21 @@ if (empty($account->userid)) {
}
// Define value to know what current user can do on users
$canadduser = (!empty($user->admin) || $user->hasRight('user', 'user', 'creer') || $user->rights->hrm->write_personal_information->write);
$canreaduser = (!empty($user->admin) || $user->rights->user->user->lire || $user->rights->hrm->read_personal_information->read);
$permissiontoaddbankaccount = ($user->hasRight('salaries', 'write') || $user->hasRight('hrm', 'employee', 'write') || $user->hasRight('user', 'creer'));
$selfpermission = ($user->id == $id && $user->hasRight('user', 'self', 'creer'));
$canadduser = (!empty($user->admin) || $user->hasRight('user', 'user', 'creer') || $user->hasRight('hrm', 'write_personal_information', 'write') );
$canreaduser = (!empty($user->admin) || $user->hasRight('user', 'user', 'lire') || $user->hasRight('hrm', 'read_personal_information', 'read') );
$permissiontoaddbankaccount = ($user->hasRight('salaries', 'write') || $user->hasRight('hrm', 'employee', 'write') || $user->hasRight('user', 'user', 'creer') || $selfpermission);
$permissiontoreadhr = $user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write');
$permissiontowritehr = $user->hasRight('hrm', 'write_personal_information', 'write');
$permissiontosimpleedit = ($selfpermission || $canadduser);
// Ok if user->hasRight('salaries', 'read') or user->hasRight('hrm', 'read')
// Ok if user->hasRight('salaries', 'readall') or user->hasRight('hrm', 'read')
//$result = restrictedArea($user, 'salaries|hrm', $object->id, 'user&user', $feature2);
$ok = false;
if ($user->id == $id) {
$ok = true; // A user can always read its own card
}
if ($user->hasRight('salaries', 'read')) {
if ($user->hasRight('salaries', 'readall')) {
$ok = true;
}
if ($user->hasRight('hrm', 'read')) {
@ -201,7 +203,7 @@ if ($action == 'setbirth' && $canadduser && !$cancel) {
}
// update personal email
if ($action == 'setpersonal_email' && $canadduser && !$cancel) {
if ($action == 'setpersonal_email' && $permissiontosimpleedit && !$cancel) {
$object->personal_email = (string) GETPOST('personal_email', 'alphanohtml');
$result = $object->update($user);
if ($result < 0) {
@ -210,7 +212,7 @@ if ($action == 'setpersonal_email' && $canadduser && !$cancel) {
}
// update personal mobile
if ($action == 'setpersonal_mobile' && $canadduser && !$cancel) {
if ($action == 'setpersonal_mobile' && $permissiontosimpleedit && !$cancel) {
$object->personal_mobile = (string) GETPOST('personal_mobile', 'alphanohtml');
$result = $object->update($user);
if ($result < 0) {
@ -282,7 +284,7 @@ llxHeader('', $title, $help_url);
$head = user_prepare_head($object);
if ($id && $bankid && $action == 'edit' && ($user->hasRight('user', 'user', 'creer') || $user->hasRight('hrm', 'write_personal_information', 'write'))) {
if ($id && $bankid && $action == 'edit' && !$cancel && $permissiontoaddbankaccount) {
if ($conf->use_javascript_ajax) {
print "\n<script>";
print 'jQuery(document).ready(function () {
@ -303,7 +305,7 @@ if ($id && $bankid && $action == 'edit' && ($user->hasRight('user', 'user', 'cre
print '<input type="hidden" name="id" value="'.GETPOSTINT("id").'">';
print '<input type="hidden" name="bankid" value="'.$bankid.'">';
}
if ($id && $action == 'create' && $user->hasRight('user', 'user', 'creer')) {
if ($id && $action == 'create' && !$cancel && $permissiontoaddbankaccount) {
if ($conf->use_javascript_ajax) {
print "\n<script>";
print 'jQuery(document).ready(function () {
@ -493,7 +495,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac
}
// Personal email
if ($user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write')) {
if ($user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write') || $permissiontosimpleedit) {
print '<tr class="nowrap">';
print '<td>';
print $form->editfieldkey("UserPersonalEmail", 'personal_email', $object->personal_email, $object, $user->hasRight('user', 'user', 'creer') || $user->hasRight('hrm', 'write_personal_information', 'write'));
@ -504,7 +506,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac
}
// Personal phone
if ($user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write')) {
if ($user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write') || $permissiontosimpleedit) {
print '<tr class="nowrap">';
print '<td>';
print $form->editfieldkey("UserPersonalMobile", 'personal_mobile', $object->personal_mobile, $object, $user->hasRight('user', 'user', 'creer') || $user->hasRight('hrm', 'write_personal_information', 'write'));
@ -895,7 +897,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac
}
// Edit
if ($id && ($action == 'edit' || $action == 'create') && $user->hasRight('user', 'user', 'creer')) {
if ($id && ($action == 'edit' || $action == 'create') && $permissiontoaddbankaccount) {
$title = $langs->trans("User");
print dol_get_fiche_head($head, 'bank', $title, 0, 'user');
@ -1030,11 +1032,11 @@ if ($id && ($action == 'edit' || $action == 'create') && $user->hasRight('user',
print $form->buttonsSaveCancel($action == 'create' ? "Create" : "Modify");
}
if ($id && $action == 'edit' && $user->hasRight('user', 'user', 'creer')) {
if ($id && $action == 'edit' && $permissiontoaddbankaccount) {
print '</form>';
}
if ($id && $action == 'create' && $user->hasRight('user', 'user', 'creer')) {
if ($id && $action == 'create' && $permissiontoaddbankaccount) {
print '</form>';
}