forked from Wavyzz/dolibarr
Merge branch 'develop' into contact_canvas_phpstan
This commit is contained in:
@@ -2652,12 +2652,6 @@ parameters:
|
||||
count: 1
|
||||
path: ../../htdocs/blockedlog/class/blockedlog.class.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$aaa might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 1
|
||||
path: ../../htdocs/blockedlog/class/blockedlog.class.php
|
||||
|
||||
-
|
||||
message: '#^Property BOM\:\:\$status \(int\) in isset\(\) is not nullable\.$#'
|
||||
identifier: isset.property
|
||||
@@ -8142,12 +8136,6 @@ parameters:
|
||||
count: 1
|
||||
path: ../../htdocs/core/actions_massactions.inc.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$action might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 14
|
||||
path: ../../htdocs/core/actions_massactions.inc.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$from might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
@@ -8166,12 +8154,6 @@ parameters:
|
||||
count: 1
|
||||
path: ../../htdocs/core/actions_massactions.inc.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$month might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 2
|
||||
path: ../../htdocs/core/actions_massactions.inc.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$newlang in empty\(\) always exists and is always falsy\.$#'
|
||||
identifier: empty.variable
|
||||
@@ -8202,12 +8184,6 @@ parameters:
|
||||
count: 1
|
||||
path: ../../htdocs/core/actions_massactions.inc.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$year might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 2
|
||||
path: ../../htdocs/core/actions_massactions.inc.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$classfile might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
@@ -17340,18 +17316,6 @@ parameters:
|
||||
count: 4
|
||||
path: ../../htdocs/cron/class/cronjob.class.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$ExecTimeLimit in empty\(\) always exists and is not falsy\.$#'
|
||||
identifier: empty.variable
|
||||
count: 1
|
||||
path: ../../htdocs/cron/class/cronjob.class.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$MemoryLimit in empty\(\) always exists and is always falsy\.$#'
|
||||
identifier: empty.variable
|
||||
count: 1
|
||||
path: ../../htdocs/cron/class/cronjob.class.php
|
||||
|
||||
-
|
||||
message: '#^Ternary operator condition is always true\.$#'
|
||||
identifier: ternary.alwaysTrue
|
||||
@@ -25356,36 +25320,6 @@ parameters:
|
||||
count: 1
|
||||
path: ../../htdocs/product/class/product.class.php
|
||||
|
||||
-
|
||||
message: '#^Property Product\:\:\$stats_bom has no type specified\.$#'
|
||||
identifier: missingType.property
|
||||
count: 1
|
||||
path: ../../htdocs/product/class/product.class.php
|
||||
|
||||
-
|
||||
message: '#^Property Product\:\:\$stats_facture_fournisseur has no type specified\.$#'
|
||||
identifier: missingType.property
|
||||
count: 1
|
||||
path: ../../htdocs/product/class/product.class.php
|
||||
|
||||
-
|
||||
message: '#^Property Product\:\:\$stats_facturerec has no type specified\.$#'
|
||||
identifier: missingType.property
|
||||
count: 1
|
||||
path: ../../htdocs/product/class/product.class.php
|
||||
|
||||
-
|
||||
message: '#^Property Product\:\:\$stats_mrptoconsume has no type specified\.$#'
|
||||
identifier: missingType.property
|
||||
count: 1
|
||||
path: ../../htdocs/product/class/product.class.php
|
||||
|
||||
-
|
||||
message: '#^Property Product\:\:\$stats_mrptoproduce has no type specified\.$#'
|
||||
identifier: missingType.property
|
||||
count: 1
|
||||
path: ../../htdocs/product/class/product.class.php
|
||||
|
||||
-
|
||||
message: '#^Property Product\:\:\$status \(int\) in isset\(\) is not nullable\.$#'
|
||||
identifier: isset.property
|
||||
@@ -25416,12 +25350,6 @@ parameters:
|
||||
count: 2
|
||||
path: ../../htdocs/product/class/product.class.php
|
||||
|
||||
-
|
||||
message: '#^Ternary operator condition is always true\.$#'
|
||||
identifier: ternary.alwaysTrue
|
||||
count: 1
|
||||
path: ../../htdocs/product/class/product.class.php
|
||||
|
||||
-
|
||||
message: '#^Negated boolean expression is always true\.$#'
|
||||
identifier: booleanNot.alwaysTrue
|
||||
@@ -27762,12 +27690,6 @@ parameters:
|
||||
count: 2
|
||||
path: ../../htdocs/projet/tasks.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$param might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 17
|
||||
path: ../../htdocs/projet/tasks.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$permissiontodelete might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
@@ -28428,42 +28350,6 @@ parameters:
|
||||
count: 1
|
||||
path: ../../htdocs/public/payment/newpayment.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$PAYPAL_API_KO might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 2
|
||||
path: ../../htdocs/public/payment/newpayment.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$PAYPAL_API_OK might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 2
|
||||
path: ../../htdocs/public/payment/newpayment.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$PAYPAL_API_PASSWORD might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 1
|
||||
path: ../../htdocs/public/payment/newpayment.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$PAYPAL_API_SANDBOX might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 1
|
||||
path: ../../htdocs/public/payment/newpayment.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$PAYPAL_API_SIGNATURE might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 1
|
||||
path: ../../htdocs/public/payment/newpayment.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$PAYPAL_API_USER might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
count: 1
|
||||
path: ../../htdocs/public/payment/newpayment.php
|
||||
|
||||
-
|
||||
message: '#^Variable \$attendee might not be defined\.$#'
|
||||
identifier: variable.undefined
|
||||
|
||||
@@ -374,7 +374,7 @@ class Adherent extends CommonObject
|
||||
*/
|
||||
const STATUS_VALIDATED = 1;
|
||||
/**
|
||||
* Resiliated
|
||||
* Resiliated (membership end and was not renew)
|
||||
*/
|
||||
const STATUS_RESILIATED = 0;
|
||||
/**
|
||||
|
||||
@@ -61,16 +61,16 @@ print load_fiche_titre($langs->trans("SetupArea"), '', 'tools');
|
||||
|
||||
|
||||
if (getDolGlobalString('MAIN_MOTD_SETUPPAGE')) {
|
||||
$conf->global->MAIN_MOTD_SETUPPAGE = preg_replace('/<br(\s[\sa-zA-Z_="]*)?\/?>/i', '<br>', $conf->global->MAIN_MOTD_SETUPPAGE);
|
||||
$conf->global->MAIN_MOTD_SETUPPAGE = preg_replace('/<br(\s[\sa-zA-Z_="]*)?\/?>/i', '<br>', getDolGlobalString('MAIN_MOTD_SETUPPAGE'));
|
||||
if (getDolGlobalString('MAIN_MOTD_SETUPPAGE')) {
|
||||
$i = 0;
|
||||
$reg = array();
|
||||
while (preg_match('/__\(([a-zA-Z|@]+)\)__/i', $conf->global->MAIN_MOTD_SETUPPAGE, $reg) && $i < 100) {
|
||||
while (preg_match('/__\(([a-zA-Z|@]+)\)__/i', getDolGlobalString('MAIN_MOTD_SETUPPAGE'), $reg) && $i < 100) {
|
||||
$tmp = explode('|', $reg[1]);
|
||||
if (!empty($tmp[1])) {
|
||||
$langs->load($tmp[1]);
|
||||
}
|
||||
$conf->global->MAIN_MOTD_SETUPPAGE = preg_replace('/__\('.preg_quote($reg[1]).'\)__/i', $langs->trans($tmp[0]), $conf->global->MAIN_MOTD_SETUPPAGE);
|
||||
$conf->global->MAIN_MOTD_SETUPPAGE = preg_replace('/__\('.preg_quote($reg[1]).'\)__/i', $langs->trans($tmp[0]), getDolGlobalString('MAIN_MOTD_SETUPPAGE'));
|
||||
$i++;
|
||||
}
|
||||
|
||||
|
||||
@@ -1059,9 +1059,24 @@ if ($action == 'edit') {
|
||||
$text .= /* ($text ? '<br><br>' : ''). */$langs->trans("WarningPHPMailSPF", getDolGlobalString('MAIN_EXTERNAL_SMTP_SPF_STRING_TO_ADD'));
|
||||
}
|
||||
if (getDolGlobalString('MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS')) { // Not defined by default. Depend on platform.
|
||||
$ipstoshow = '';
|
||||
// List of IP shown as record to add as allowed IP if we use the smtp method. Value is '1.2.3.4, [aaaa:bbbb:cccc:dddd]'
|
||||
// TODO Add a key to allow to show the IP/name of server detected dynamically
|
||||
$text .= ($text ? '<br><br>' : '').$langs->trans("WarningPHPMail2", getDolGlobalString('MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS'));
|
||||
$arrayipstoshow = explode(',', getDolGlobalString('MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS'));
|
||||
foreach ($arrayipstoshow as $iptoshow) {
|
||||
// If MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS is an URL to get/show the public IP/name of server detected dynamically
|
||||
if (preg_match('/^http/i', $iptoshow)) {
|
||||
$tmpresult = getURLContent($iptoshow, 'GET', '', 1, array(), array('http', 'https'), 0);
|
||||
if (!empty($tmpresult['content'])) {
|
||||
$iptoshow = $tmpresult['content'];
|
||||
} else {
|
||||
$iptoshow = ''; // Failed to get IP
|
||||
}
|
||||
}
|
||||
$ipstoshow .= ($ipstoshow ? ', ' : '').trim($iptoshow);
|
||||
}
|
||||
if ($ipstoshow) {
|
||||
$text .= ($text ? '<br><br>' : '').$langs->trans("WarningPHPMail2", $ipstoshow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ $search_end = -1;
|
||||
if (GETPOST('search_endyear') != '') {
|
||||
$search_end = dol_mktime(23, 59, 59, $search_endmonth, $search_endday, $search_endyear);
|
||||
}
|
||||
$search_code = GETPOST('search_code', 'alpha');
|
||||
$search_code = GETPOST('search_code', 'array:alpha');
|
||||
$search_ref = GETPOST('search_ref', 'alpha');
|
||||
$search_amount = GETPOST('search_amount', 'alpha');
|
||||
|
||||
@@ -138,7 +138,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x'
|
||||
$search_fk_user = '';
|
||||
$search_start = -1;
|
||||
$search_end = -1;
|
||||
$search_code = '';
|
||||
$search_code = array();
|
||||
$search_ref = '';
|
||||
$search_amount = '';
|
||||
$search_showonlyerrors = 0;
|
||||
@@ -496,15 +496,13 @@ print '</td>';
|
||||
|
||||
// Actions code
|
||||
print '<td class="liste_titre">';
|
||||
print $form->selectarray('search_code', $block_static->trackedevents, $search_code, 1, 0, 0, '', 1, 0, 0, 'ASC', 'maxwidth150', 1);
|
||||
//print $form->selectarray('search_code', $block_static->trackedevents, $search_code, 1, 0, 0, '', 1, 0, 0, 'ASC', 'maxwidth150', 1);
|
||||
print $form->multiselectarray('search_code', $block_static->trackedevents, $search_code, 0, 0, 'maxwidth150', 1);
|
||||
print '</td>';
|
||||
|
||||
// Ref
|
||||
print '<td class="liste_titre"><input type="text" class="maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).'"></td>';
|
||||
|
||||
// Link to ref
|
||||
print '<td class="liste_titre"></td>';
|
||||
|
||||
// Amount
|
||||
print '<td class="liste_titre right"><input type="text" class="maxwidth50" name="search_amount" value="'.dol_escape_htmltag($search_amount).'"></td>';
|
||||
|
||||
@@ -521,6 +519,9 @@ print $form->selectarray('search_showonlyerrors', $array, $search_showonlyerrors
|
||||
print '</td>';
|
||||
|
||||
// Status note
|
||||
//print '<td class="liste_titre"></td>';
|
||||
|
||||
// Link to original ref into business software
|
||||
print '<td class="liste_titre"></td>';
|
||||
|
||||
// Action column
|
||||
@@ -543,12 +544,12 @@ print getTitleFieldOfList($langs->trans('Date'), 0, $_SERVER["PHP_SELF"], 'date_
|
||||
print getTitleFieldOfList($langs->trans('Author'), 0, $_SERVER["PHP_SELF"], 'user_fullname', '', $param, '', $sortfield, $sortorder, '')."\n";
|
||||
print getTitleFieldOfList($langs->trans('Action'), 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, '')."\n";
|
||||
print getTitleFieldOfList($langs->trans('Ref'), 0, $_SERVER["PHP_SELF"], 'ref_object', '', $param, '', $sortfield, $sortorder, '')."\n";
|
||||
print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, '')."\n";
|
||||
print getTitleFieldOfList($langs->trans('Amount'), 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right ')."\n";
|
||||
print getTitleFieldOfList($langs->trans('DataOfArchivedEvent'), 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'center ', 0, $langs->trans('DataOfArchivedEventHelp').'<br>'.$langs->trans('DataOfArchivedEventHelp2'), 1)."\n";
|
||||
print getTitleFieldOfList($langs->trans('DataOfArchivedEvent'), 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'center ', 0, $langs->trans('DataOfArchivedEventHelp'), 1)."\n";
|
||||
print getTitleFieldOfList($langs->trans('Fingerprint'), 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, '')."\n";
|
||||
print getTitleFieldOfList($langs->trans('Status'), 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'center ')."\n";
|
||||
print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'center ')."\n";
|
||||
print getTitleFieldOfList($form->textwithpicto($langs->trans('Status'), $langs->trans('DataOfArchivedEventHelp2')), 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'center ')."\n";
|
||||
//print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'center ')."\n";
|
||||
print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, '')."\n";
|
||||
// Action column
|
||||
if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
|
||||
print getTitleFieldOfList('<span id="blockchainstatus"></span>', 0, $_SERVER["PHP_SELF"], '', '', $param, 'class="center"', $sortfield, $sortorder, '')."\n";
|
||||
@@ -633,12 +634,6 @@ if (is_array($blocks)) {
|
||||
print dol_escape_htmltag($block->ref_object);
|
||||
print '</td>';
|
||||
|
||||
// Link to source object
|
||||
print '<td class="tdoverflowmax150"'.(preg_match('/<a/', $object_link) ? '' : 'title="'.dol_escape_htmltag(dol_string_nohtmltag($object_link.($object_link_title ? ' - '.$object_link_title : ''))).'"').'>';
|
||||
print '<!-- object_link -->'; // $object_link can be a '<a href' link or a text
|
||||
print $object_link;
|
||||
print '</td>';
|
||||
|
||||
// Amount
|
||||
print '<td class="right nowraponall">'.price($block->amounts).'</td>';
|
||||
|
||||
@@ -666,14 +661,18 @@ if (is_array($blocks)) {
|
||||
} else {
|
||||
print '<span class="badge badge-status4 badge-status" title="'.$langs->trans('OkCheckFingerprintValidity').'">OK</span>';
|
||||
}
|
||||
print '</td>';
|
||||
//print '</td>';
|
||||
|
||||
// Note
|
||||
print '<td class="center">';
|
||||
//print '<td class="center">';
|
||||
if (!$checkresult[$block->id] || ($loweridinerror && $block->id >= $loweridinerror)) { // If error
|
||||
if ($checkresult[$block->id]) {
|
||||
print $form->textwithpicto('', $langs->trans('OkCheckFingerprintValidityButChainIsKo'));
|
||||
} else {
|
||||
//print $form->textwithpicto('', $langs->trans('KoCheckFingerprintValidity'));
|
||||
}
|
||||
} else {
|
||||
//print $form->textwithpicto('', $langs->trans('DataOfArchivedEventHelp2'));
|
||||
}
|
||||
|
||||
if (getDolGlobalString('BLOCKEDLOG_USE_REMOTE_AUTHORITY') && getDolGlobalString('BLOCKEDLOG_AUTHORITY_URL')) {
|
||||
@@ -681,6 +680,12 @@ if (is_array($blocks)) {
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
// Link to source object
|
||||
print '<td class="tdoverflowmax150"'.(preg_match('/<a/', $object_link) ? '' : 'title="'.dol_escape_htmltag(dol_string_nohtmltag($object_link.($object_link_title ? ' - '.$object_link_title : ''))).'"').'>';
|
||||
print '<!-- object_link -->'; // $object_link can be a '<a href' link or a text
|
||||
print $object_link;
|
||||
print '</td>';
|
||||
|
||||
// Action column
|
||||
if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
|
||||
print '<td class="liste_titre">';
|
||||
|
||||
@@ -169,7 +169,7 @@ class BlockedLog
|
||||
// Customer Invoice/Facture / Payment
|
||||
if (isModEnabled('invoice')) {
|
||||
$this->trackedevents['BILL_VALIDATE'] = 'logBILL_VALIDATE';
|
||||
$this->trackedevents['BILL_DELETE'] = 'logBILL_DELETE';
|
||||
//$this->trackedevents['BILL_UPDATE'] = 'logBILL_UPDATE';
|
||||
$this->trackedevents['BILL_SENTBYMAIL'] = 'logBILL_SENTBYMAIL';
|
||||
$this->trackedevents['DOC_DOWNLOAD'] = 'BlockedLogBillDownload';
|
||||
$this->trackedevents['DOC_PREVIEW'] = 'BlockedLogBillPreview';
|
||||
@@ -532,7 +532,8 @@ class BlockedLog
|
||||
continue; // Discard some properties
|
||||
}
|
||||
if (!in_array($key, array(
|
||||
'ref', 'ref_client', 'ref_supplier', 'date', 'datef', 'datev', 'type', 'total_ht', 'total_tva', 'total_ttc', 'localtax1', 'localtax2', 'revenuestamp', 'datepointoftax', 'note_public', 'lines'
|
||||
'ref', 'ref_client', 'ref_supplier', 'date', 'datef', 'datev', 'type', 'total_ht', 'total_tva', 'total_ttc', 'localtax1', 'localtax2', 'revenuestamp', 'datepointoftax', 'note_public', 'lines',
|
||||
'module_source', 'pos_source'
|
||||
))) {
|
||||
continue; // Discard if not into a dedicated list
|
||||
}
|
||||
@@ -542,7 +543,13 @@ class BlockedLog
|
||||
$lineid++;
|
||||
foreach ($tmpline as $keyline => $valueline) {
|
||||
if (!in_array($keyline, array(
|
||||
'ref', 'multicurrency_code', 'multicurrency_total_ht', 'multicurrency_total_tva', 'multicurrency_total_ttc', 'qty', 'product_type', 'product_label', 'vat_src_code', 'tva_tx', 'info_bits', 'localtax1_tx', 'localtax2_tx', 'total_ht', 'total_tva', 'total_ttc', 'total_localtax1', 'total_localtax2'
|
||||
'ref', 'product_type', 'product_label',
|
||||
'qty',
|
||||
'subprice',
|
||||
'vat_src_code', 'tva_tx', 'localtax1_tx', 'localtax2_tx',
|
||||
'total_ht', 'total_tva', 'total_ttc', 'total_localtax1', 'total_localtax2',
|
||||
'multicurrency_code', 'multicurrency_total_ht', 'multicurrency_total_tva', 'multicurrency_total_ttc',
|
||||
'info_bits', 'special_code',
|
||||
))) {
|
||||
continue; // Discard if not into a dedicated list
|
||||
}
|
||||
@@ -846,12 +853,12 @@ class BlockedLog
|
||||
*/
|
||||
public function dolEncodeBlockedData($data, $mode = 0)
|
||||
{
|
||||
$aaa = '';
|
||||
try {
|
||||
$aaa = json_encode($data);
|
||||
} catch (Exception $e) {
|
||||
//print $e->getErrs);
|
||||
// print $e->getErrs);
|
||||
}
|
||||
//var_dump($aaa);
|
||||
|
||||
return $aaa;
|
||||
}
|
||||
@@ -866,12 +873,12 @@ class BlockedLog
|
||||
*/
|
||||
public function dolDecodeBlockedData($data, $mode = 0)
|
||||
{
|
||||
$aaa = null;
|
||||
try {
|
||||
$aaa = (object) jsonOrUnserialize($data);
|
||||
} catch (Exception $e) {
|
||||
//print $e->getErrs);
|
||||
// print $e->getErrs);
|
||||
}
|
||||
//var_dump($aaa);
|
||||
|
||||
return $aaa;
|
||||
}
|
||||
@@ -901,12 +908,10 @@ class BlockedLog
|
||||
*/
|
||||
public function create($user, $forcesignature = '')
|
||||
{
|
||||
global $conf, $langs, $hookmanager;
|
||||
global $conf, $langs;
|
||||
|
||||
$langs->load('blockedlog');
|
||||
|
||||
$error = 0;
|
||||
|
||||
// Clean data
|
||||
$this->amounts = (float) $this->amounts;
|
||||
|
||||
@@ -941,9 +946,9 @@ class BlockedLog
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$previoushash = $this->getPreviousHash(1, 0); // This get last record and lock database until insert is done
|
||||
$previoushash = $this->getPreviousHash(1, 0); // This get last record and lock database until insert is done and transaction closed
|
||||
|
||||
$keyforsignature = $this->buildKeyForSignature();
|
||||
$keyforsignature = $this->buildKeyForSignature(); // All the information for the has (meta data + data saved)
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php';
|
||||
|
||||
@@ -1142,18 +1147,18 @@ class BlockedLog
|
||||
/**
|
||||
* Return array of log objects (with criteria)
|
||||
*
|
||||
* @param string $element element to search
|
||||
* @param int $fk_object id of object to search
|
||||
* @param int<0,max> $limit max number of element, 0 for all
|
||||
* @param string $sortfield sort field
|
||||
* @param string $sortorder sort order
|
||||
* @param int $search_fk_user id of user(s)
|
||||
* @param int $search_start start time limit
|
||||
* @param int $search_end end time limit
|
||||
* @param string $search_ref search ref
|
||||
* @param string $search_amount search amount
|
||||
* @param string $search_code search code
|
||||
* @return BlockedLog[]|int<-2,-1> Array of object log or <0 if error
|
||||
* @param string $element element to search
|
||||
* @param int $fk_object id of object to search
|
||||
* @param int<0,max> $limit max number of element, 0 for all
|
||||
* @param string $sortfield sort field
|
||||
* @param string $sortorder sort order
|
||||
* @param int $search_fk_user id of user(s)
|
||||
* @param int $search_start start time limit
|
||||
* @param int $search_end end time limit
|
||||
* @param string $search_ref search ref
|
||||
* @param string $search_amount search amount
|
||||
* @param string|string[] $search_code search code
|
||||
* @return BlockedLog[]|int<-2,-1> Array of object log or <0 if error
|
||||
*/
|
||||
public function getLog($element, $fk_object, $limit = 0, $sortfield = '', $sortorder = '', $search_fk_user = -1, $search_start = -1, $search_end = -1, $search_ref = '', $search_amount = '', $search_code = '')
|
||||
{
|
||||
@@ -1195,8 +1200,14 @@ class BlockedLog
|
||||
if ($search_amount != '') {
|
||||
$sql .= natural_search("amounts", $search_amount, 1);
|
||||
}
|
||||
if ($search_code != '' && $search_code != '-1') {
|
||||
$sql .= natural_search("action", $search_code, 3);
|
||||
if (is_array($search_code)) {
|
||||
if (!empty($search_code)) {
|
||||
$sql .= natural_search("action", implode(',', $search_code), 3);
|
||||
}
|
||||
} else {
|
||||
if ($search_code != '' && $search_code != '-1') {
|
||||
$sql .= natural_search("action", $search_code, 3);
|
||||
}
|
||||
}
|
||||
|
||||
$sql .= $this->db->order($sortfield, $sortorder);
|
||||
|
||||
@@ -2343,10 +2343,10 @@ if ($num > 0) {
|
||||
}
|
||||
// Type ent
|
||||
if (!empty($arrayfields['typent.code']['checked'])) {
|
||||
print '<td class="center">';
|
||||
if (!is_array($typenArray) || count($typenArray) == 0) {
|
||||
$typenArray = $formcompany->typent_array(1);
|
||||
}
|
||||
print '<td class="center tdoverflowmax100" title="'.dolPrintHTML($typenArray[$obj->typent_code]).'">';
|
||||
if (!empty($obj->typent_code)) {
|
||||
print $typenArray[$obj->typent_code];
|
||||
}
|
||||
@@ -2357,10 +2357,10 @@ if ($num > 0) {
|
||||
}
|
||||
// Staff
|
||||
if (!empty($arrayfields['staff.code']['checked'])) {
|
||||
print '<td class="center">';
|
||||
if (!is_array($conf->cache['staff']) || count($conf->cache['staff']) == 0) {
|
||||
$conf->cache['staff'] = $formcompany->effectif_array(1);
|
||||
}
|
||||
print '<td class="center tdoverflowmax100" title="'.dolPrintHTML($conf->cache['staff'][$obj->staff_code]).'">';
|
||||
print $conf->cache['staff'][$obj->staff_code];
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
@@ -2532,8 +2532,6 @@ if ($num > 0) {
|
||||
}
|
||||
}
|
||||
//else print $langs->trans("NoSalesRepresentativeAffected");
|
||||
} else {
|
||||
print ' ';
|
||||
}
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
|
||||
@@ -55,10 +55,13 @@
|
||||
* @var ?string $objectlabel
|
||||
* @var ?string $option
|
||||
* @var ?int $deliveryreceipt
|
||||
* @var string $action
|
||||
* @var string $massaction
|
||||
* @var string $objectclass
|
||||
* @var string $uploaddir
|
||||
* @var string $confirm
|
||||
* @var string $month
|
||||
* @var string $year
|
||||
* @var int $error
|
||||
*/
|
||||
'
|
||||
|
||||
@@ -2011,7 +2011,6 @@ class ExtraFields
|
||||
}
|
||||
|
||||
//if ($computed) $value = // $value is already calculated into $value before calling this method
|
||||
|
||||
$showsize = 0;
|
||||
if ($type == 'date') {
|
||||
$showsize = 10;
|
||||
@@ -2039,9 +2038,9 @@ class ExtraFields
|
||||
} elseif ($type == 'double') {
|
||||
if (!empty($value)) {
|
||||
//$value=price($value);
|
||||
$sizeparts = explode(",", $size);
|
||||
$number_decimals = array_key_exists(1, $sizeparts) ? $sizeparts[1] : 0;
|
||||
$value = price($value, 0, $outputlangs, 0, 0, $number_decimals, '');
|
||||
//$sizeparts = explode(",", $size);
|
||||
//$number_decimals = array_key_exists(1, $sizeparts) ? $sizeparts[1] : 0;
|
||||
$value = price($value, 0, $outputlangs, 0, 0, -2, '');
|
||||
}
|
||||
} elseif ($type == 'boolean') {
|
||||
$checked = '';
|
||||
|
||||
@@ -1387,7 +1387,7 @@ class FormFile
|
||||
// Show title of list of existing files
|
||||
$morehtmlright = '';
|
||||
if (!empty($moreoptions['showhideaddbutton']) && $conf->use_javascript_ajax) {
|
||||
$tmpurlforbutton = 'javascript:console.log("open add file form");jQuery(".divattachnewfile").toggle(); if (!jQuery(".divattachnewfile").is(":hidden")) { jQuery("input[type=\'file\']").click(); }';
|
||||
$tmpurlforbutton = 'javascript:console.log("open add file form");jQuery(".divattachnewfile").toggle(); if (!jQuery(".divattachnewfile").is(":hidden")) { jQuery("input[type=\'file\']").click();}void(0);';
|
||||
$morehtmlright .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', $tmpurlforbutton, '', $permtoeditline);
|
||||
}
|
||||
|
||||
@@ -2221,7 +2221,7 @@ class FormFile
|
||||
|
||||
$morehtmlright = '';
|
||||
if (!empty($moreoptions['showhideaddbutton']) && $conf->use_javascript_ajax) {
|
||||
$morehtmlright .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', 'javascript:console.log("open addlink form"); jQuery(".divlinkfile").toggle();', '', $permissiontoedit);
|
||||
$morehtmlright .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', 'javascript:console.log("open addlink form"); jQuery(".divlinkfile").toggle(); void(0);', '', $permissiontoedit);
|
||||
}
|
||||
|
||||
// Show list of associated links
|
||||
|
||||
@@ -11733,7 +11733,7 @@ function natural_search($fields, $value, $mode = 0, $nofirstand = 0)
|
||||
*/
|
||||
function showDirectDownloadLink($object)
|
||||
{
|
||||
global $conf, $langs;
|
||||
global $langs;
|
||||
|
||||
$out = '';
|
||||
$url = $object->getLastMainDocLink($object->element);
|
||||
@@ -11845,6 +11845,25 @@ function getAdvancedPreviewUrl($modulepart, $relativepath, $alldata = 0, $param
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make content of an input box selected when we click into input field.
|
||||
*
|
||||
* @param int $idcode Id of special code
|
||||
* @return string
|
||||
*/
|
||||
function getLabelSpecialCode($idcode)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$arrayspecialines = array(1 => 'Transport', 2 => 'EcoTax', 3 => 'Option');
|
||||
if ($idcode > 10) {
|
||||
return 'Module ID '.$idcode;
|
||||
}
|
||||
if (!empty($arrayspecialines[$idcode])) {
|
||||
return $langs->trans($arrayspecialines[$idcode]);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Make content of an input box selected when we click into input field.
|
||||
|
||||
@@ -1231,15 +1231,18 @@ class pdf_crabe extends ModelePDFFactures
|
||||
}
|
||||
|
||||
// If France, show VAT mention if applicable
|
||||
if ($this->emetteur->country_code == 'FR' && empty($object->total_tva) && (empty($mysoc->tva_assuj) || ($this->emetteur->isInEEC() && $object->thirdparty->isInEEC()))) {
|
||||
$pdf->SetFont('', 'B', $default_font_size - 2);
|
||||
if (in_array($this->emetteur->country_code, array('FR')) && empty($object->total_tva)) {
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
if ($mysoc->forme_juridique_code == 92) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoiceAsso"), 0, 'L', 0);
|
||||
} else {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
|
||||
if (empty($mysoc->tva_assuj)) {
|
||||
if ($mysoc->forme_juridique_code == 92) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoiceAsso"), 0, 'L', 0);
|
||||
} else {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
|
||||
}
|
||||
} elseif (getDolGlobalString("INVOICE_VAT_SHOW_REVERSE_CHARGE_MENTION") && $this->emetteur->country_code != $object->thirdparty->country_code && $this->emetteur->isInEEC() && $object->thirdparty->isInEEC()) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedReverseChargeProcedure"), 0, 'L', 0);
|
||||
}
|
||||
|
||||
$posy = $pdf->GetY() + 4;
|
||||
}
|
||||
|
||||
|
||||
@@ -1398,15 +1398,18 @@ class pdf_octopus extends ModelePDFFactures
|
||||
}
|
||||
|
||||
// If France, show VAT mention if applicable
|
||||
if ($this->emetteur->country_code == 'FR' && empty($object->total_tva) && (empty($mysoc->tva_assuj) || ($this->emetteur->isInEEC() && $object->thirdparty->isInEEC()))) {
|
||||
$pdf->SetFont('', 'B', $default_font_size - 2);
|
||||
if (in_array($this->emetteur->country_code, array('FR')) && empty($object->total_tva)) {
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
if ($mysoc->forme_juridique_code == 92) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoiceAsso"), 0, 'L', 0);
|
||||
} else {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
|
||||
if (empty($mysoc->tva_assuj)) {
|
||||
if ($mysoc->forme_juridique_code == 92) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoiceAsso"), 0, 'L', 0);
|
||||
} else {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
|
||||
}
|
||||
} elseif (getDolGlobalString("INVOICE_VAT_SHOW_REVERSE_CHARGE_MENTION") && $this->emetteur->country_code != $object->thirdparty->country_code && $this->emetteur->isInEEC() && $object->thirdparty->isInEEC()) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedReverseChargeProcedure"), 0, 'L', 0);
|
||||
}
|
||||
|
||||
$posy = $pdf->GetY() + 4;
|
||||
}
|
||||
|
||||
|
||||
@@ -1329,15 +1329,18 @@ class pdf_sponge extends ModelePDFFactures
|
||||
}
|
||||
|
||||
// If France, show VAT mention if applicable
|
||||
if ($this->emetteur->country_code == 'FR' && empty($object->total_tva) && (empty($mysoc->tva_assuj) || ($this->emetteur->isInEEC() && $object->thirdparty->isInEEC()))) {
|
||||
if (in_array($this->emetteur->country_code, array('FR')) && empty($object->total_tva)) {
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
if ($mysoc->forme_juridique_code == 92) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoiceAsso"), 0, 'L', 0);
|
||||
} else {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
|
||||
if (empty($mysoc->tva_assuj)) {
|
||||
if ($mysoc->forme_juridique_code == 92) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoiceAsso"), 0, 'L', 0);
|
||||
} else {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
|
||||
}
|
||||
} elseif (getDolGlobalString("INVOICE_VAT_SHOW_REVERSE_CHARGE_MENTION") && $this->emetteur->country_code != $object->thirdparty->country_code && $this->emetteur->isInEEC() && $object->thirdparty->isInEEC()) {
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedReverseChargeProcedure"), 0, 'L', 0);
|
||||
}
|
||||
|
||||
$posy = $pdf->GetY() + 4;
|
||||
}
|
||||
|
||||
|
||||
@@ -400,4 +400,37 @@ class modAccounting extends DolibarrModules
|
||||
'b.multicurrency_code'=>"US (Necessary if devise is different than EUR)",
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function called when module is enabled.
|
||||
* The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
|
||||
* It also creates data directories
|
||||
*
|
||||
* @param string $options Options when enabling module ('', 'noboxes')
|
||||
* @return int 1 if OK, 0 if KO
|
||||
*/
|
||||
public function init($options = '')
|
||||
{
|
||||
$result = $this->_load_tables('/install/mysql/', 'accounting');
|
||||
if ($result < 0) {
|
||||
return -1; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default')
|
||||
}
|
||||
|
||||
$sql = array();
|
||||
return $this->_init($sql, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function called when module is disabled.
|
||||
* Remove from database constants, boxes and permissions from Dolibarr database.
|
||||
* Data directories are not deleted
|
||||
*
|
||||
* @param string $options Options when enabling module ('', 'noboxes')
|
||||
* @return int 1 if OK, 0 if KO
|
||||
*/
|
||||
public function remove($options = '')
|
||||
{
|
||||
$sql = array();
|
||||
return $this->_remove($sql, $options);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ class modStock extends DolibarrModules
|
||||
*/
|
||||
public function __construct($db)
|
||||
{
|
||||
global $conf, $langs;
|
||||
global $conf, $langs; // $conf is used by inc.php
|
||||
|
||||
$this->db = $db;
|
||||
$this->numero = 52;
|
||||
@@ -156,6 +156,17 @@ class modStock extends DolibarrModules
|
||||
$this->rights[$r][4] = 'mouvement';
|
||||
$this->rights[$r][5] = 'creer';
|
||||
|
||||
if (getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) {
|
||||
// Not yet implemented. TODO
|
||||
$r++;
|
||||
$this->rights[$r][0] = 1008;
|
||||
$this->rights[$r][1] = 'Read stock value';
|
||||
$this->rights[$r][2] = 'w';
|
||||
$this->rights[$r][3] = 0;
|
||||
$this->rights[$r][4] = 'value_advance';
|
||||
$this->rights[$r][5] = 'read';
|
||||
}
|
||||
|
||||
$r++;
|
||||
$this->rights[$r][0] = 1011;
|
||||
$this->rights[$r][1] = 'inventoryReadPermission'; // Permission label
|
||||
|
||||
@@ -23,6 +23,46 @@
|
||||
*/
|
||||
'@phan-var-force array{nbfield:int,type?:array<int,string>,pos?:array<int,int>,val?:array<int,float>} $totalarray';
|
||||
|
||||
if (!function_exists('printTotalValCell')) { // allow two list with total on same screen
|
||||
|
||||
/** print a total cell value according to its type
|
||||
*
|
||||
* @param string $type of field (duration, string..)
|
||||
* @param string $val the value to display
|
||||
*
|
||||
* @return void (direct print)
|
||||
*/
|
||||
function printTotalValCell($type, $val)
|
||||
{
|
||||
// if $totalarray['type'] not present we consider it as number
|
||||
if (empty($type)) {
|
||||
$type = 'real';
|
||||
}
|
||||
switch ($type) {
|
||||
case 'duration':
|
||||
print '<td class="right">';
|
||||
print(!empty($val) ? convertSecondToTime((int) $val, 'allhourmin') : 0);
|
||||
print '</td>';
|
||||
break;
|
||||
case 'string': // This type is no more used. type is now varchar(x)
|
||||
print '<td class="left">';
|
||||
print(!empty($val) ? $val : '');
|
||||
print '</td>';
|
||||
break;
|
||||
case 'stock':
|
||||
print '<td class="right">';
|
||||
print price2num(!empty($val) ? $val : 0, 'MS');
|
||||
print '</td>';
|
||||
break;
|
||||
default:
|
||||
print '<td class="right">';
|
||||
print price(!empty($val) ? $val : 0);
|
||||
print '</td>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Move fields of totalizable into the common array pos and val
|
||||
if (!empty($totalarray['totalizable']) && is_array($totalarray['totalizable'])) {
|
||||
foreach ($totalarray['totalizable'] as $keytotalizable => $valtotalizable) {
|
||||
@@ -107,40 +147,3 @@ if (isset($totalarray['pos'])) {
|
||||
}
|
||||
//print '</tfoot>';
|
||||
}
|
||||
|
||||
/** print a total cell value according to its type
|
||||
*
|
||||
* @param string $type of field (duration, string..)
|
||||
* @param string $val the value to display
|
||||
*
|
||||
* @return void (direct print)
|
||||
*/
|
||||
function printTotalValCell($type, $val)
|
||||
{
|
||||
// if $totalarray['type'] not present we consider it as number
|
||||
if (empty($type)) {
|
||||
$type = 'real';
|
||||
}
|
||||
switch ($type) {
|
||||
case 'duration':
|
||||
print '<td class="right">';
|
||||
print(!empty($val) ? convertSecondToTime((int) $val, 'allhourmin') : 0);
|
||||
print '</td>';
|
||||
break;
|
||||
case 'string': // This type is no more used. type is now varchar(x)
|
||||
print '<td class="left">';
|
||||
print(!empty($val) ? $val : '');
|
||||
print '</td>';
|
||||
break;
|
||||
case 'stock':
|
||||
print '<td class="right">';
|
||||
print price2num(!empty($val) ? $val : 0, 'MS');
|
||||
print '</td>';
|
||||
break;
|
||||
default:
|
||||
print '<td class="right">';
|
||||
print price(!empty($val) ? $val : 0);
|
||||
print '</td>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -312,8 +312,8 @@ $tooltiponpricemultiprice = '';
|
||||
$tooltiponpriceend = '';
|
||||
$tooltiponpriceendmultiprice = '';
|
||||
if (!getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER')) {
|
||||
$tooltiponprice = $langs->transcountry("TotalHT", $mysoc->country_code).'='.price($line->total_ht, 0, '', 0, 0);
|
||||
$tooltiponpricemultiprice = $langs->transcountry("TotalHT", $mysoc->country_code).'='.price($line->multicurrency_total_ht, 0, '', 0, 0);
|
||||
$tooltiponprice .= $langs->transcountry("TotalHT", $mysoc->country_code).'='.price($line->total_ht, 0, '', 0, 0);
|
||||
$tooltiponpricemultiprice .= $langs->transcountry("TotalHT", $mysoc->country_code).'='.price($line->multicurrency_total_ht, 0, '', 0, 0);
|
||||
$tooltiponprice .= '<br>'.$langs->transcountry("TotalVAT", ($senderissupplier ? $object->thirdparty->country_code : $mysoc->country_code)).'='.price($line->total_tva, 0, '', 0, 0);
|
||||
$tooltiponpricemultiprice .= '<br>'.$langs->transcountry("TotalVAT", ($senderissupplier ? $object->thirdparty->country_code : $mysoc->country_code)).'='.price($line->multicurrency_total_tva, 0, '', 0, 0);
|
||||
if (is_object($object->thirdparty)) {
|
||||
@@ -347,6 +347,19 @@ if (!getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER')) {
|
||||
$tooltiponprice .= '<br>'.$langs->transcountry("TotalTTC", $mysoc->country_code).'='.price($line->total_ttc, 0, '', 0, 0);
|
||||
$tooltiponpricemultiprice .= '<br>'.$langs->transcountry("TotalTTC", $mysoc->country_code).'='.price($line->multicurrency_total_ttc, 0, '', 0, 0);
|
||||
|
||||
if (!empty($line->special_code) || $line->product_type == 9) {
|
||||
$tooltiponprice .= '<br>';
|
||||
$tooltiponpricemultiprice .= '<br>';
|
||||
if (!empty($line->special_code)) {
|
||||
$tooltiponprice .= '<br>'.$langs->trans("SpecialLine").' : '.getLabelSpecialCode($line->special_code);
|
||||
$tooltiponpricemultiprice .= '<br>'.$langs->trans("SpecialLine").' : '.getLabelSpecialCode($line->special_code);
|
||||
}
|
||||
if ($line->product_type == 9) {
|
||||
$tooltiponprice .= '<br>'.$langs->trans("SpecialLine").' : '.$langs->trans("GroupingLine");
|
||||
$tooltiponpricemultiprice .= '<br>'.$langs->trans("SpecialLine").' : '.$langs->trans("GroupingLine");
|
||||
}
|
||||
}
|
||||
|
||||
$tooltiponprice = '<span class="classfortooltip" title="'.dol_escape_htmltag($tooltiponprice).'">';
|
||||
$tooltiponpricemultiprice = '<span class="classfortooltip" title="'.dol_escape_htmltag($tooltiponpricemultiprice).'">';
|
||||
|
||||
|
||||
@@ -1223,7 +1223,7 @@ class Cronjob extends CommonObject
|
||||
dol_syslog(get_class($this)."::run_jobs jobtype=".$this->jobtype." userlogin=".$userlogin, LOG_DEBUG);
|
||||
|
||||
// Increase limit of time. Works only if we are not in safe mode
|
||||
$ExecTimeLimit = 600;
|
||||
$ExecTimeLimit = getDolGlobalInt('MAIN_CRON_EXEC_TIME_LIMIT', 600);
|
||||
if (!empty($ExecTimeLimit)) {
|
||||
$err = error_reporting();
|
||||
error_reporting(0); // Disable all errors
|
||||
@@ -1231,7 +1231,7 @@ class Cronjob extends CommonObject
|
||||
@set_time_limit($ExecTimeLimit); // Need more than 240 on Windows 7/64
|
||||
error_reporting($err);
|
||||
}
|
||||
$MemoryLimit = 0;
|
||||
$MemoryLimit = getDolGlobalString('MAIN_CRON_MEMORY_LIMIT');
|
||||
if (!empty($MemoryLimit)) {
|
||||
@ini_set('memory_limit', $MemoryLimit);
|
||||
}
|
||||
|
||||
@@ -2144,10 +2144,10 @@ MAIN_PDF_NO_RECIPENT_FRAME=Hide borders on recipient address frame
|
||||
MAIN_PDF_HIDE_CUSTOMER_CODE=Hide customer code
|
||||
MAIN_PDF_HIDE_CUSTOMER_ACCOUNTING_CODE=Hide customer accounting code
|
||||
MAIN_PDF_HIDE_SENDER_NAME=Hide sender/company name in address block
|
||||
TERMSOFSALE=Conditions de vente
|
||||
MAIN_PDF_ADD_TERMSOFSALE_PROPAL=Add the conditions of sale after the proposal
|
||||
MAIN_PDF_ADD_TERMSOFSALE_ORDER=Add the conditions of sale after the order
|
||||
MAIN_PDF_ADD_TERMSOFSALE_INVOICE=Add the conditions of sale after the invoice
|
||||
TERMSOFSALE=Terms and conditions of sale
|
||||
MAIN_PDF_ADD_TERMSOFSALE_PROPAL=Add the terms and conditions of sale after the proposal
|
||||
MAIN_PDF_ADD_TERMSOFSALE_ORDER=Add the terms and conditions of sale after the order
|
||||
MAIN_PDF_ADD_TERMSOFSALE_INVOICE=Add the terms and conditions of sale after the invoice
|
||||
PROPOSAL_PDF_HIDE_PAYMENTTERM=Hide payments conditions
|
||||
PROPOSAL_PDF_HIDE_PAYMENTMODE=Hide payment mode
|
||||
MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING=Add a hidden markup into the signature area to allow electronic signature tool to reuse it. May be used by external tools or in the future by the online signature feature.
|
||||
@@ -2582,7 +2582,7 @@ DolibarrStandardCaptcha=A native captcha generated by Dolibarr
|
||||
SALES_ORDER_SHOW_SHIPPING_ADDRESS=Show shipping address
|
||||
SALES_ORDER_SHOW_SHIPPING_ADDRESSMore=Compulsory indication in some countries (France, ...)
|
||||
PDF_INVOICE_SHOW_VAT_ANALYSIS=Show vat analysis per rate
|
||||
MaxNbOfRecordOnListIsOk=You have a max size for lists is set to <b>%s</b> lines. This is a good value.
|
||||
MaxNbOfRecordOnListIsOk=You have a max size for lists set to <b>%s</b> lines. This is a good value.
|
||||
YouHaveALargeAmountOfRecordOnLists=You have a default max size for lists set to <b>%s</b> lines. This is a large value that need scrolling to see all answers. It is better to have a value lower than <b>%s</b> and use pagination to see record over this number. Change this in menu Home - Setup - Display.
|
||||
RoundBorders=Round borders
|
||||
CheckIfModuleIsNotBlackListed=Block install for modules found into the <b>Remote blacklist</b>
|
||||
@@ -2593,7 +2593,7 @@ SensitiveData=Sensitive data
|
||||
ToolToDecryptAString=Tool to decrypt a string
|
||||
Decrypt=Decrypt
|
||||
FilesIntegrityDesc=If you want to check the integrity of files instead of database, you can do it by using <a href="%s">this tool</a>.
|
||||
AttributeCodeHelp=A code of your choice (without special char and space) to identify the property.<br>Note that if an object B is created from an existing object A that has a different type (for example creation of an invoice from an order), the value of the complementary attributes of A are also copied into the complementary attributes of B when the code of the attribute is the same.
|
||||
AttributeCodeHelp=A code of your choice (without special chars and spaces) to identify the property.<br>Note that if an object B is created from an existing object A that has a different type (for example creation of an invoice from an order), the value of the complementary attributes of A are also copied into the complementary attributes of B when the code of the attribute is the same.
|
||||
ThereIsMoreThanXAnswers=There is more than %s answers with your filter. Please add more filters...
|
||||
PdfAddTermOfSaleHelp=Upload the condition of sales from file input at the bottom of this setup page
|
||||
WarningOnlineSignature=Please note that this function allows a person (customer, supplier...) to insert, online, the image of his signature in the PDF document. As for a handwritten signature, such a signature can be made by anyone and does not have the same legal value as a legal electronic signature system going through a paying trusted third party. If you need this level of security, you can contact an integrator for more information or check for addons on www.dolistore.org.
|
||||
PdfAddTermOfSaleHelp=You can upload the terms and conditions of sale file at the bottom of this setup page
|
||||
WarningOnlineSignature=Please note that this function allows a person (customer, supplier...) to insert, online, the image of his signature in the PDF document. As for a handwritten signature, such a signature can be made by anyone and might not have the same legal value as a legal electronic signature system going through an authorized trusted third party. If you need this level of security, you can contact an integrator for more information or check for addons on www.dolistore.org.
|
||||
|
||||
@@ -523,6 +523,7 @@ SendTo=sent to
|
||||
PaymentByTransferOnThisBankAccount=Payment by transfer to the following bank account
|
||||
VATIsNotUsedForInvoice=* Non applicable VAT art-293B of CGI
|
||||
VATIsNotUsedForInvoiceAsso=* Non applicable VAT art-261-7 of CGI
|
||||
VATIsNotUsedReverseChargeProcedure=* Non applicable VAT art-259-1 of CGI
|
||||
LawApplicationPart1=By application of the law 80.335 of 12/05/80
|
||||
LawApplicationPart2=the goods remain the property of
|
||||
LawApplicationPart3=the seller until full payment of
|
||||
|
||||
@@ -7,7 +7,7 @@ BrowseBlockedLog=Unalterable logs
|
||||
ShowAllFingerPrintsMightBeTooLong=Show all archived logs (might be long)
|
||||
ShowAllFingerPrintsErrorsMightBeTooLong=Show all non-valid archive logs (might be long)
|
||||
DownloadBlockChain=Download fingerprints
|
||||
KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
|
||||
KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, OR has erased the previous archived record (check that the line with previous # exists) OR has modified the checksum of the previous record.
|
||||
OkCheckFingerprintValidity=Archived log record is valid. The data on this line was not modified and the entry follows the previous one.
|
||||
OkCheckFingerprintValidityButChainIsKo=Archived log seems valid compared to previous one but the chain was corrupted previously.
|
||||
AddedByAuthority=Stored into remote authority
|
||||
@@ -18,9 +18,9 @@ BlockedlogInfoDialog=Log Details
|
||||
ListOfTrackedEvents=List of tracked events
|
||||
Fingerprint=Fingerprint
|
||||
DownloadLogCSV=Export archived logs (CSV)
|
||||
DataOfArchivedEvent=Full data of archived event
|
||||
DataOfArchivedEventHelp=This field contains the unalterable and structured data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
|
||||
DataOfArchivedEventHelp2=Its integrity is guaranteed if the status of the line is OK
|
||||
DataOfArchivedEvent=Complementary data of archived event
|
||||
DataOfArchivedEventHelp=This field contains the complementary data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
|
||||
DataOfArchivedEventHelp2=The integrity of data on each lines is guaranteed if the status of the line is OK
|
||||
ImpossibleToReloadObject=Original object (type %s, id %s) not linked (see 'Full datas' column to get unalterable saved data)
|
||||
BlockedLogAreRequiredByYourCountryLegislation=Unalterable Logs module may be required by the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of legal software as they can not be validated by a tax audit.
|
||||
BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Unalterable Logs module was activated because of the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of legal software as they cannot be validated by a tax audit.
|
||||
|
||||
@@ -344,8 +344,8 @@ ErrorStartHourIsNull=Start date field cannot be empty
|
||||
ErrorTooManyLinesToProcessPleaseUseAMoreSelectiveFilter=Too many lines to process. Please use a more selective filter.
|
||||
ErrorEmptyValueForQty=Quantity cannot be zero.
|
||||
ErrorNoCloneWithoutName=The new user must have a name
|
||||
ErrorNoCloneWithoutEmail=The new user must have a email
|
||||
ErrorUserClone=Error when clone categories user
|
||||
ErrorNoCloneWithoutEmail=The new user must have an email
|
||||
ErrorUserClone=Error in user clone categories
|
||||
ErrorQtyOrderedLessQtyShipped = The quantity ordered cannot be less than the quantity shipped.
|
||||
ErrorVariousPaymentOnBankAccountWithADifferentCurrencyNotYetSupported=Error, creating a various payment on a bank account with a currency different than the currency of the company is not yet supported.
|
||||
ErrorStreamMustBeEnabled=The PHP stream %s is not available. Check your PHP modules and Dolibarr parameter $dolibarr_main_stream_to_disable.
|
||||
|
||||
@@ -32,7 +32,7 @@ NewMailing=New mass Email
|
||||
NewSMSing=New smsing
|
||||
EditMailing=Edit mass Email
|
||||
ResetMailing=Resend mass Email
|
||||
ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
|
||||
ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets status in error
|
||||
ResetMailingTargetMassaction=Reset status in error
|
||||
DeleteMailing=Delete mass Email
|
||||
PreviewMailing=Preview mass Email
|
||||
|
||||
@@ -498,7 +498,7 @@ ActionRunningNotStarted=To start
|
||||
ActionRunningShort=In progress
|
||||
ActionDoneShort=Finished
|
||||
ActionUncomplete=Incomplete
|
||||
LatestLinkedEvents=Latest %s linked events
|
||||
LatestLinkedEvents=The last %s events
|
||||
CompanyFoundation=Company/Organization
|
||||
Accountant=Accountant
|
||||
ContactsForCompany=Contacts for this third party
|
||||
@@ -1341,3 +1341,6 @@ Operator=Operator
|
||||
AllFieldsRequired=All fields are required.
|
||||
IsDefined=Is defined
|
||||
IsNotDefined=Is not defined
|
||||
SpecialLine=Special Line
|
||||
EcoTax=Eco-Tax
|
||||
GroupingLine=Grouping line
|
||||
|
||||
@@ -496,7 +496,7 @@ ActionRunningNotStarted=A réaliser
|
||||
ActionRunningShort=En cours
|
||||
ActionDoneShort=Terminé
|
||||
ActionUncomplete=Incomplet
|
||||
LatestLinkedEvents=Les %s derniers événements liés
|
||||
LatestLinkedEvents=Les %s derniers événements
|
||||
CompanyFoundation=Société/Organisation
|
||||
Accountant=Comptable
|
||||
ContactsForCompany=Contacts de ce tiers
|
||||
|
||||
@@ -343,8 +343,14 @@ foreach ($search as $key => $val) {
|
||||
}
|
||||
$mode_search = 2;
|
||||
}
|
||||
if ($search[$key] != '') {
|
||||
$sql .= natural_search("t.".$db->sanitize($key), $search[$key], (($key == 'status') ? 2 : $mode_search));
|
||||
if (empty($object->fields[$key]['searchmulti'])) {
|
||||
if (!is_array($search[$key]) && $search[$key] != '') {
|
||||
$sql .= natural_search("t.".$db->escape($key), $search[$key], (($key == 'status') ? 2 : $mode_search));
|
||||
}
|
||||
} else {
|
||||
if (is_array($search[$key]) && !empty($search[$key])) {
|
||||
$sql .= natural_search("t.".$db->escape($key), implode(',', $search[$key]), (($key == 'status') ? 2 : $mode_search));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') {
|
||||
@@ -632,7 +638,11 @@ foreach ($object->fields as $key => $val) {
|
||||
if (!empty($arrayfields['t.'.$key]['checked'])) {
|
||||
print '<td class="liste_titre'.($cssforfield ? ' '.$cssforfield : '').($key == 'status' ? ' parentonrightofpage' : '').'">';
|
||||
if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) {
|
||||
print $form->selectarray('search_'.$key, $val['arrayofkeyval'], (isset($search[$key]) ? $search[$key] : ''), 1, 0, 0, '', 1, 0, 0, '', 'maxwidth100'.($key == 'status' ? ' search_status width100 onrightofpage' : ''), 1);
|
||||
if (empty($val['searchmulti'])) {
|
||||
print $form->selectarray('search_'.$key, $val['arrayofkeyval'], (isset($search[$key]) ? $search[$key] : ''), 1, 0, 0, '', 1, 0, 0, '', 'maxwidth100'.($key == 'status' ? ' search_status width100 onrightofpage' : ''), 1);
|
||||
} else {
|
||||
print $form->multiselectarray('search_'.$key, $val['arrayofkeyval'], (isset($search[$key]) ? $search[$key] : ''), 0, 0, 'maxwidth100'.($key == 'status' ? ' search_status width100 onrightofpage' : ''), 1);
|
||||
}
|
||||
} elseif ((strpos($val['type'], 'integer:') === 0) || (strpos($val['type'], 'sellist:') === 0)) {
|
||||
print $object->showInputField($val, $key, (isset($search[$key]) ? $search[$key] : ''), '', '', 'search_', $cssforfield.' maxwidth250', 1);
|
||||
} elseif (preg_match('/^(date|timestamp|datetime)/', $val['type'])) {
|
||||
|
||||
@@ -267,7 +267,7 @@ if (isModEnabled("bank")) {
|
||||
print '<tr class="oddeven"><td>';
|
||||
print $langs->trans("CSSUrlForPaymentForm").'</td><td>';
|
||||
print '<input size="64" type="text" name="ONLINE_PAYMENT_CSS_URL" value="'.getDolGlobalString('ONLINE_PAYMENT_CSS_URL').'">';
|
||||
print ' <span class="opacitymedium">'.$langs->trans("Example").': http://mysite/mycss.css</span>';
|
||||
print ' <span class="opacitymedium">'.$langs->trans("Example").': https://mysite/mycss.css</span>';
|
||||
print '</td></tr>';
|
||||
|
||||
|
||||
@@ -374,17 +374,19 @@ print 'Your API authentication information can be found with following steps. We
|
||||
print '</div>';
|
||||
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
print "\n".'<script type="text/javascript">';
|
||||
print '$(document).ready(function () {
|
||||
$("#apidoc").hide();
|
||||
$("#apidoca").click(function() {
|
||||
console.log("We click on apidoca so we show/hide");
|
||||
$("#apidoc").show();
|
||||
$("#apidoca").hide();
|
||||
return false;
|
||||
})
|
||||
});';
|
||||
print '</script>';
|
||||
print '
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$("#apidoc").hide();
|
||||
$("#apidoca").click(function() {
|
||||
console.log("We click on apidoca so we show/hide");
|
||||
$("#apidoc").show();
|
||||
$("#apidoca").hide();
|
||||
return false;
|
||||
})
|
||||
});
|
||||
</script>
|
||||
';
|
||||
}
|
||||
|
||||
print '<br><br>';
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?php
|
||||
/* Copyright (C) 2008-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2011-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
/* Copyright (C) 2008-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2011-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -467,22 +468,10 @@ function hash_call($methodName, $nvpStr)
|
||||
}
|
||||
|
||||
// Clean parameters
|
||||
$PAYPAL_API_USER = "";
|
||||
if (getDolGlobalString('PAYPAL_API_USER')) {
|
||||
$PAYPAL_API_USER = getDolGlobalString('PAYPAL_API_USER');
|
||||
}
|
||||
$PAYPAL_API_PASSWORD = "";
|
||||
if (getDolGlobalString('PAYPAL_API_PASSWORD')) {
|
||||
$PAYPAL_API_PASSWORD = getDolGlobalString('PAYPAL_API_PASSWORD');
|
||||
}
|
||||
$PAYPAL_API_SIGNATURE = "";
|
||||
if (getDolGlobalString('PAYPAL_API_SIGNATURE')) {
|
||||
$PAYPAL_API_SIGNATURE = getDolGlobalString('PAYPAL_API_SIGNATURE');
|
||||
}
|
||||
$PAYPAL_API_SANDBOX = "";
|
||||
if (getDolGlobalString('PAYPAL_API_SANDBOX')) {
|
||||
$PAYPAL_API_SANDBOX = getDolGlobalString('PAYPAL_API_SANDBOX');
|
||||
}
|
||||
$PAYPAL_API_USER = getDolGlobalString('PAYPAL_API_USER');
|
||||
$PAYPAL_API_PASSWORD = getDolGlobalString('PAYPAL_API_PASSWORD');
|
||||
$PAYPAL_API_SIGNATURE = getDolGlobalString('PAYPAL_API_SIGNATURE');
|
||||
$PAYPAL_API_SANDBOX = getDolGlobalString('PAYPAL_API_SANDBOX');
|
||||
// TODO END problem with triggers
|
||||
|
||||
dol_syslog("Paypal API endpoint ".$API_Endpoint);
|
||||
@@ -514,8 +503,8 @@ function hash_call($methodName, $nvpStr)
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, ($ssl_verifypeer ? true : false));
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, ($ssl_verifypeer ? true : false));
|
||||
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, !getDolGlobalString('MAIN_USE_CONNECT_TIMEOUT') ? 5 : $conf->global->MAIN_USE_CONNECT_TIMEOUT);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, !getDolGlobalString('MAIN_USE_RESPONSE_TIMEOUT') ? 30 : $conf->global->MAIN_USE_RESPONSE_TIMEOUT);
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, getDolGlobalInt('MAIN_USE_CONNECT_TIMEOUT', 5));
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, getDolGlobalInt('MAIN_USE_RESPONSE_TIMEOUT', 30));
|
||||
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?php
|
||||
/* Copyright (C) 2010-2011 Laurent Destailleur <eldy@users.sourceforge.org>
|
||||
* Copyright (C) 2011 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
/* Copyright (C) 2010-2011 Laurent Destailleur <eldy@users.sourceforge.org>
|
||||
* Copyright (C) 2011 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -57,22 +58,10 @@ if (getDolGlobalString('PAYPAL_API_SANDBOX') || GETPOST('forcesandbox', 'alpha')
|
||||
}
|
||||
|
||||
// Clean parameters
|
||||
$PAYPAL_API_USER = "";
|
||||
if (getDolGlobalString('PAYPAL_API_USER')) {
|
||||
$PAYPAL_API_USER = getDolGlobalString('PAYPAL_API_USER');
|
||||
}
|
||||
$PAYPAL_API_PASSWORD = "";
|
||||
if (getDolGlobalString('PAYPAL_API_PASSWORD')) {
|
||||
$PAYPAL_API_PASSWORD = getDolGlobalString('PAYPAL_API_PASSWORD');
|
||||
}
|
||||
$PAYPAL_API_SIGNATURE = "";
|
||||
if (getDolGlobalString('PAYPAL_API_SIGNATURE')) {
|
||||
$PAYPAL_API_SIGNATURE = getDolGlobalString('PAYPAL_API_SIGNATURE');
|
||||
}
|
||||
$PAYPAL_API_SANDBOX = "";
|
||||
if (getDolGlobalString('PAYPAL_API_SANDBOX')) {
|
||||
$PAYPAL_API_SANDBOX = getDolGlobalString('PAYPAL_API_SANDBOX');
|
||||
}
|
||||
$PAYPAL_API_USER = getDolGlobalString('PAYPAL_API_USER');
|
||||
$PAYPAL_API_PASSWORD = getDolGlobalString('PAYPAL_API_PASSWORD');
|
||||
$PAYPAL_API_SIGNATURE = getDolGlobalString('PAYPAL_API_SIGNATURE');
|
||||
$PAYPAL_API_SANDBOX = getDolGlobalString('PAYPAL_API_SANDBOX');
|
||||
|
||||
// Proxy
|
||||
$PROXY_HOST = getDolGlobalString('MAIN_PROXY_HOST');
|
||||
|
||||
@@ -646,10 +646,30 @@ class Product extends CommonObject
|
||||
* @var array{}|array{customers_toconsume:int,nb_toconsume:int,qty_toconsume:float,customers_consumed:int,nb_consumed:int,qty_consumed:float,customers_toproduce:int,nb_toproduce:int,qty_toproduce:float,customers_produced:int,nb_produced:int,qty_produced:float} stats by role toconsume, consumed, toproduce, produced
|
||||
*/
|
||||
public $stats_mo = array();
|
||||
|
||||
/**
|
||||
* @var array{}|array{nb_toproduce:int,nb_toconsume:int,qty_toproduce:float,qty_toconsume:float}
|
||||
*/
|
||||
public $stats_bom = array();
|
||||
|
||||
/**
|
||||
* @var array{}|array{customers:int,nb:int,rows:int,qty:float} stats mrp to consume
|
||||
*/
|
||||
public $stats_mrptoconsume = array();
|
||||
|
||||
/**
|
||||
* @var array{}|array{customers:int,nb:int,rows:int,qty:float} stats mrp to produce
|
||||
*/
|
||||
public $stats_mrptoproduce = array();
|
||||
|
||||
/**
|
||||
* @var array{}|array{customers:int,nb:int,rows:int,qty:float} stats facture rec
|
||||
*/
|
||||
public $stats_facturerec = array();
|
||||
|
||||
/**
|
||||
* @var array{}|array{suppliers:int,nb:int,rows:int,qty:float} stats supplier invoices
|
||||
*/
|
||||
public $stats_facture_fournisseur = array();
|
||||
|
||||
/**
|
||||
@@ -1137,10 +1157,10 @@ class Product extends CommonObject
|
||||
|
||||
if ($id > 0) {
|
||||
$this->id = $id;
|
||||
$this->price = $price_ht;
|
||||
$this->price_ttc = $price_ttc;
|
||||
$this->price_min = $price_min_ht;
|
||||
$this->price_min_ttc = $price_min_ttc;
|
||||
$this->price = $price_ht;
|
||||
$this->price_ttc = $price_ttc;
|
||||
$this->price_min = $price_min_ht;
|
||||
$this->price_min_ttc = $price_min_ttc;
|
||||
|
||||
$result = $this->_log_price($user);
|
||||
if ($result > 0) {
|
||||
@@ -3079,7 +3099,7 @@ class Product extends CommonObject
|
||||
$this->multiprices_min_ttc[$i] = $result ? $result["price_min_ttc"] : null;
|
||||
$this->multiprices_base_type[$i] = $result ? $result["price_base_type"] : null;
|
||||
// Next two fields are used only if PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL is on
|
||||
$this->multiprices_tva_tx[$i] = $result ? $result["tva_tx"].($result ? ' ('.$result['default_vat_code'].')' : '') : null;
|
||||
$this->multiprices_tva_tx[$i] = $result ? $result["tva_tx"].(!empty($result['default_vat_code']) ? ' ('.$result['default_vat_code'].')' : '') : null;
|
||||
$this->multiprices_recuperableonly[$i] = $result ? $result["recuperableonly"] : null;
|
||||
|
||||
// Price by quantity
|
||||
@@ -3909,36 +3929,36 @@ class Product extends CommonObject
|
||||
$this->stats_mrptoconsume['customers'] = 0;
|
||||
$this->stats_mrptoconsume['nb'] = 0;
|
||||
$this->stats_mrptoconsume['rows'] = 0;
|
||||
$this->stats_mrptoconsume['qty'] = 0;
|
||||
$this->stats_mrptoconsume['qty'] = 0.0;
|
||||
$this->stats_mrptoproduce['customers'] = 0;
|
||||
$this->stats_mrptoproduce['nb'] = 0;
|
||||
$this->stats_mrptoproduce['rows'] = 0;
|
||||
$this->stats_mrptoproduce['qty'] = 0;
|
||||
$this->stats_mrptoproduce['qty'] = 0.0;
|
||||
}
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
while ($obj = $this->db->fetch_object($result)) {
|
||||
if ($obj->role == 'toconsume' && empty($warehouseid)) {
|
||||
$this->stats_mrptoconsume['customers'] += $obj->nb_customers;
|
||||
$this->stats_mrptoconsume['nb'] += $obj->nb;
|
||||
$this->stats_mrptoconsume['rows'] += $obj->nb_rows;
|
||||
$this->stats_mrptoconsume['qty'] += ($obj->qty ? $obj->qty : 0);
|
||||
$this->stats_mrptoconsume['customers'] += (int) $obj->nb_customers;
|
||||
$this->stats_mrptoconsume['nb'] += (int) $obj->nb;
|
||||
$this->stats_mrptoconsume['rows'] += (int) $obj->nb_rows;
|
||||
$this->stats_mrptoconsume['qty'] += ($obj->qty ? (float) $obj->qty : 0.0);
|
||||
}
|
||||
if ($obj->role == 'consumed' && empty($warehouseid)) {
|
||||
//$this->stats_mrptoconsume['customers'] += $obj->nb_customers;
|
||||
//$this->stats_mrptoconsume['nb'] += $obj->nb;
|
||||
//$this->stats_mrptoconsume['rows'] += $obj->nb_rows;
|
||||
$this->stats_mrptoconsume['qty'] -= ($obj->qty ? $obj->qty : 0);
|
||||
$this->stats_mrptoconsume['qty'] -= ($obj->qty ? (float) $obj->qty : 0.0);
|
||||
}
|
||||
if ($obj->role == 'toproduce') {
|
||||
if ($warehouseid) {
|
||||
$this->stock_warehouse[$warehouseid]->stats_mrptoproduce['qty'] += ($obj->qty ? $obj->qty : 0);
|
||||
$this->stock_warehouse[$warehouseid]->stats_mrptoproduce['qty'] += ($obj->qty ? (float) $obj->qty : 0.0);
|
||||
} else {
|
||||
$this->stats_mrptoproduce['customers'] += $obj->nb_customers;
|
||||
$this->stats_mrptoproduce['nb'] += $obj->nb;
|
||||
$this->stats_mrptoproduce['rows'] += $obj->nb_rows;
|
||||
$this->stats_mrptoproduce['qty'] += ($obj->qty ? $obj->qty : 0);
|
||||
$this->stats_mrptoproduce['customers'] += (int) $obj->nb_customers;
|
||||
$this->stats_mrptoproduce['nb'] += (int) $obj->nb;
|
||||
$this->stats_mrptoproduce['rows'] += (int) $obj->nb_rows;
|
||||
$this->stats_mrptoproduce['qty'] += ($obj->qty ? (float) $obj->qty : 0.0);
|
||||
}
|
||||
}
|
||||
if ($obj->role == 'produced') {
|
||||
@@ -4164,10 +4184,10 @@ class Product extends CommonObject
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
$obj = $this->db->fetch_object($result);
|
||||
$this->stats_facturerec['customers'] = $obj->nb_customers;
|
||||
$this->stats_facturerec['nb'] = $obj->nb;
|
||||
$this->stats_facturerec['rows'] = $obj->nb_rows;
|
||||
$this->stats_facturerec['qty'] = $obj->qty ? $obj->qty : 0;
|
||||
$this->stats_facturerec['customers'] = (int) $obj->nb_customers;
|
||||
$this->stats_facturerec['nb'] = (int) $obj->nb;
|
||||
$this->stats_facturerec['rows'] = (int) $obj->nb_rows;
|
||||
$this->stats_facturerec['qty'] = $obj->qty ? (float) $obj->qty : 0.0;
|
||||
|
||||
// if it's a virtual product, maybe it is in invoice by extension
|
||||
if (getDolGlobalString('PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC')) {
|
||||
@@ -4238,10 +4258,10 @@ class Product extends CommonObject
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
$obj = $this->db->fetch_object($result);
|
||||
$this->stats_facture_fournisseur['suppliers'] = $obj->nb_suppliers;
|
||||
$this->stats_facture_fournisseur['nb'] = $obj->nb;
|
||||
$this->stats_facture_fournisseur['rows'] = $obj->nb_rows;
|
||||
$this->stats_facture_fournisseur['qty'] = $obj->qty ? $obj->qty : 0;
|
||||
$this->stats_facture_fournisseur['suppliers'] = (int) $obj->nb_suppliers;
|
||||
$this->stats_facture_fournisseur['nb'] = (int) $obj->nb;
|
||||
$this->stats_facture_fournisseur['rows'] = (int) $obj->nb_rows;
|
||||
$this->stats_facture_fournisseur['qty'] = $obj->qty ? (float) $obj->qty : 0.0;
|
||||
|
||||
$parameters = array('socid' => $socid);
|
||||
$reshook = $hookmanager->executeHooks('loadStatsSupplierInvoice', $parameters, $this, $action);
|
||||
|
||||
@@ -448,6 +448,7 @@ $help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos";
|
||||
llxHeader("", $title, $help_url, '', 0, 0, '', '', '', 'mod-project page-card_tasks');
|
||||
|
||||
$arrayofselected = is_array($toselect) ? $toselect : array();
|
||||
$param = '';
|
||||
|
||||
if ($id > 0 || !empty($ref)) {
|
||||
$result = $object->fetch($id, $ref);
|
||||
|
||||
@@ -231,6 +231,12 @@ $ref = $REF = GETPOST('ref', 'alpha');
|
||||
$TAG = GETPOST("tag", 'alpha');
|
||||
$FULLTAG = GETPOST("fulltag", 'alpha'); // fulltag is tag with more information
|
||||
$SECUREKEY = GETPOST("securekey"); // Secure key
|
||||
$PAYPAL_API_OK = "";
|
||||
$PAYPAL_API_KO = "";
|
||||
$PAYPAL_API_SANDBOX = "";
|
||||
$PAYPAL_API_USER = "";
|
||||
$PAYPAL_API_PASSWORD = "";
|
||||
$PAYPAL_API_SIGNATURE = "";
|
||||
|
||||
if ($paymentmethod && !preg_match('/'.preg_quote('PM='.$paymentmethod, '/').'/', $FULLTAG)) {
|
||||
$FULLTAG .= ($FULLTAG ? '.' : '').'PM='.$paymentmethod;
|
||||
@@ -286,6 +292,7 @@ $urlko = preg_replace('/&$/', '', $urlko); // Remove last &
|
||||
';
|
||||
|
||||
if ((empty($paymentmethod) || $paymentmethod == 'paypal') && isModEnabled('paypal')) {
|
||||
global $PAYPAL_API_SANDBOX, $PAYPAL_API_OK, $PAYPAL_API_KO, $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
|
||||
require_once DOL_DOCUMENT_ROOT.'/paypal/lib/paypal.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/paypal/lib/paypalfunctions.lib.php';
|
||||
|
||||
|
||||
@@ -71,7 +71,8 @@ if (isModEnabled('paypal')) {
|
||||
*/
|
||||
|
||||
$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "paybox", "paypal", "stripe"));
|
||||
|
||||
$PAYPALTOKEN = "";
|
||||
$PAYPALPAYERID = "";
|
||||
if (isModEnabled('paypal')) {
|
||||
$PAYPALTOKEN = GETPOST('TOKEN');
|
||||
if (empty($PAYPALTOKEN)) {
|
||||
|
||||
@@ -77,23 +77,17 @@ $hookmanager->initHooks(array('newpayment'));
|
||||
$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "paybox", "paypal", "stripe"));
|
||||
|
||||
// Clean parameters
|
||||
$PAYPAL_API_USER = "";
|
||||
$PAYPAL_API_PASSWORD = "";
|
||||
$PAYPAL_API_SIGNATURE = "";
|
||||
$PAYPAL_API_SANDBOX = "";
|
||||
$PAYPALTOKEN = "";
|
||||
$PAYPALPAYERID = "";
|
||||
if (isModEnabled('paypal')) {
|
||||
$PAYPAL_API_USER = "";
|
||||
if (getDolGlobalString('PAYPAL_API_USER')) {
|
||||
$PAYPAL_API_USER = getDolGlobalString('PAYPAL_API_USER');
|
||||
}
|
||||
$PAYPAL_API_PASSWORD = "";
|
||||
if (getDolGlobalString('PAYPAL_API_PASSWORD')) {
|
||||
$PAYPAL_API_PASSWORD = getDolGlobalString('PAYPAL_API_PASSWORD');
|
||||
}
|
||||
$PAYPAL_API_SIGNATURE = "";
|
||||
if (getDolGlobalString('PAYPAL_API_SIGNATURE')) {
|
||||
$PAYPAL_API_SIGNATURE = getDolGlobalString('PAYPAL_API_SIGNATURE');
|
||||
}
|
||||
$PAYPAL_API_SANDBOX = "";
|
||||
if (getDolGlobalString('PAYPAL_API_SANDBOX')) {
|
||||
$PAYPAL_API_SANDBOX = getDolGlobalString('PAYPAL_API_SANDBOX');
|
||||
}
|
||||
$PAYPAL_API_USER = getDolGlobalString('PAYPAL_API_USER');
|
||||
$PAYPAL_API_PASSWORD = getDolGlobalString('PAYPAL_API_PASSWORD');
|
||||
$PAYPAL_API_SIGNATURE = getDolGlobalString('PAYPAL_API_SIGNATURE');
|
||||
$PAYPAL_API_SANDBOX = getDolGlobalString('PAYPAL_API_SANDBOX');
|
||||
/*$PAYPAL_API_OK = "";
|
||||
if ($urlok) {
|
||||
$PAYPAL_API_OK = $urlok;
|
||||
|
||||
@@ -4695,12 +4695,11 @@ table.hidepaginationnext .paginationnext {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Set the color for hover lines */
|
||||
.oddeven:hover, .evenodd:hover, .oddevenimport:hover, .evenoddimport:hover, .impair:hover, .pair:hover
|
||||
{
|
||||
.oddeven:hover:not(.nohover), .evenodd:hover:not(.nohover), .oddevenimport:hover:not(.nohover), .evenoddimport:hover:not(.nohover), .impair:hover:not(.nohover), .pair:hover:not(.nohover) {
|
||||
background: var(--colorbacklinepairhover) !important; /* Must be background to be stronger than background of odd or even */
|
||||
}
|
||||
|
||||
.tredited, .tredited td {
|
||||
background: var(--colorbacklinepairchecked) !important; /* Must be background to be stronger than background of odd or even */
|
||||
border-bottom: 0 !important;
|
||||
|
||||
@@ -4761,7 +4761,6 @@ ul.noborder li:nth-child(odd):not(.liste_titre) {
|
||||
|
||||
|
||||
/* Set the color for hover lines */
|
||||
|
||||
.tmenucompanylogo.nohover, .tmenucompanylogo.nohover:hover {
|
||||
opacity: unset !important;
|
||||
}
|
||||
@@ -4770,11 +4769,11 @@ ul.noborder li:nth-child(odd):not(.liste_titre) {
|
||||
box-shadow: unset;
|
||||
-webkit-box-shadow: unset;
|
||||
}
|
||||
|
||||
.oddeven:hover, .evenodd:hover, .oddevenimport:hover, .evenoddimport:hover, .impair:hover, .pair:hover
|
||||
.oddeven:hover:not(.nohover), .evenodd:hover:not(.nohover), .oddevenimport:hover:not(.nohover), .evenoddimport:hover:not(.nohover), .impair:hover:not(.nohover), .pair:hover:not(.nohover) {
|
||||
{
|
||||
background: rgb(<?php echo $colorbacklinepairhover; ?>) !important;
|
||||
}
|
||||
|
||||
.tredited {
|
||||
background: rgb(<?php echo $colorbacklinepairchecked; ?>) !important; /* Must be background to be stronger than background of odd or even */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user