Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
b233176b72
77 changed files with 291 additions and 277 deletions
|
|
@ -9,7 +9,7 @@
|
|||
* Copyright (C) 2022 Lionel Vessiller <lvessiller@open-dsi.fr>
|
||||
* Copyright (C) 2013-2017 Olivier Geffroy <jeff@jeffinfo.com>
|
||||
* Copyright (C) 2017 Elarifr. Ari Elbaz <github@accedinfo.com>
|
||||
* Copyright (C) 2017-2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2017-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2017 André Schild <a.schild@aarboard.ch>
|
||||
* Copyright (C) 2020 Guillaume Alexandre <guillaume@tag-info.fr>
|
||||
* Copyright (C) 2022 Joachim Kueter <jkueter@gmx.de>
|
||||
|
|
@ -2242,7 +2242,7 @@ class AccountancyExport
|
|||
foreach ($objectLines as $line) {
|
||||
// TYPE C
|
||||
if ($last_codeinvoice != $line->doc_ref) {
|
||||
//recherche societe en fonction de son code client
|
||||
//search company by customer code
|
||||
$sql = "SELECT code_client, fk_forme_juridique, nom, address, zip, town, fk_pays, phone, siret FROM ".MAIN_DB_PREFIX."societe";
|
||||
$sql .= " WHERE code_client = '".$this->db->escape($line->thirdparty_code)."'";
|
||||
$resql = $this->db->query($sql);
|
||||
|
|
@ -2662,22 +2662,22 @@ class AccountancyExport
|
|||
} else {
|
||||
$tab[] = substr(length_accountg($line->numero_compte), 0, 15);
|
||||
}
|
||||
//Libellé Auto
|
||||
//Auto label
|
||||
$tab[] = "";
|
||||
//print '"'.dol_trunc(str_replace('"', '', $line->label_operation),40,'right','UTF-8',1).'"';
|
||||
//Libellé manual
|
||||
//Manual label
|
||||
$tab[] = dol_trunc(str_replace('"', '', $invoice_ref . (!empty($company_name) ? ' - ' : '') . $company_name), 40, 'right', 'UTF-8', 1);
|
||||
//Numéro de pièce
|
||||
//Document number
|
||||
$tab[] = dol_trunc(str_replace('"', '', (string) $line->piece_num), 10, 'right', 'UTF-8', 1);
|
||||
//Devise
|
||||
//Currency
|
||||
$tab[] = 'EUR';
|
||||
//Amount
|
||||
$tab[] = price2num(abs($line->debit - $line->credit));
|
||||
//Sens
|
||||
//Direction
|
||||
$tab[] = $line->sens;
|
||||
//Code lettrage
|
||||
//Matching code
|
||||
$tab[] = "";
|
||||
//Date Echéance
|
||||
//Due date
|
||||
$tab[] = $date_echeance;
|
||||
|
||||
$output = implode($separator, $tab).$end_line;
|
||||
|
|
@ -2768,10 +2768,10 @@ class AccountancyExport
|
|||
// Convert the UTF-8 string in latin9
|
||||
$tab[] = mb_convert_encoding(str_replace(' - Compte auxiliaire', '', $line->label_operation), "Windows-1252", 'UTF-8');
|
||||
|
||||
//Calcul de la longueur des numéros de comptes
|
||||
//Calculate account number length
|
||||
$taille_numero = strlen(length_accountg($line->numero_compte));
|
||||
|
||||
//Création du numéro de client et fournisseur générique
|
||||
//Build generic customer and supplier account number
|
||||
$numero_cpt_client = '411';
|
||||
$numero_cpt_fourn = '401';
|
||||
for ($i = 1; $i <= ($taille_numero - 3); $i++) {
|
||||
|
|
@ -2779,7 +2779,7 @@ class AccountancyExport
|
|||
$numero_cpt_fourn .= '0';
|
||||
}
|
||||
|
||||
//Création des comptes auxiliaire des clients et fournisseur
|
||||
//Build auxiliary accounts for customers and suppliers
|
||||
if (length_accountg($line->numero_compte) == $numero_cpt_client || length_accountg($line->numero_compte) == $numero_cpt_fourn) {
|
||||
$tab[] = rtrim(length_accounta($line->subledger_account), "0");
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* Copyright (C) 2009-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2016 Jonathan TISSEAU <jonathan.tisseau@86dev.fr>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -74,7 +74,7 @@ if (preg_match('/^mac/i', PHP_OS)) {
|
|||
}
|
||||
|
||||
|
||||
//$wikihelp = 'EN:Setup_EMails|FR:Paramétrage_EMails|ES:Configuración_EMails';
|
||||
//$wikihelp = 'EN:Setup_EMails|FR:Parametrage_EMails|ES:Configuracion_EMails';
|
||||
$wikihelp = '';
|
||||
llxHeader('', $langs->trans("Setup"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-mails_ingoing');
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2021-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2021-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2026 Charlene Benke <charlene@patas-monkey.com>
|
||||
*
|
||||
|
|
@ -1663,7 +1663,7 @@ if ($mode == 'deploy') {
|
|||
});
|
||||
});
|
||||
</script>'."\n";
|
||||
// MAX_FILE_SIZE doit précéder le champ input de type file
|
||||
// MAX_FILE_SIZE must come before the file input field
|
||||
print '<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).'">';
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2012 J. Fernando Lagrange <fernando@demo-tic.org>
|
||||
* Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
* Copyright (C) 2023 Eric Seigne <eric.seigne@cap-rel.fr>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -118,7 +118,7 @@ if (empty($instructions)) {
|
|||
print dolPrintHTML($generatedContent); // Note that common HTML tags are NOT escaped (but a sanitization is done)
|
||||
} else {
|
||||
// We must not use dolPrintText because dolPrintText format data including accent in htmlentities for a HTML output. We need a non formatted output.
|
||||
//print dol_string_onlythesehtmltags('"Ça va" est une expression française et ceci une balise <a> html', 1, 1, 1);
|
||||
//print dol_string_onlythesehtmltags('"How are you" is a French expression and this is an HTML <a> tag', 1, 1, 1);
|
||||
print dol_string_onlythesehtmltags($generatedContent, 1, 1, 1);
|
||||
//print dol_string_nohtmltag($generatedContent);
|
||||
}
|
||||
|
|
@ -134,7 +134,7 @@ if (empty($instructions)) {
|
|||
print dolPrintHTML($generatedContent);
|
||||
} else {
|
||||
// We must not use dolPrintText because dolPrintText format data including accent in htmlentities for a HTML output. We need a non formatted output.
|
||||
//print dol_string_onlythesehtmltags('"Ça va" est une expression française et ceci une balise <a> html', 1, 1, 1);
|
||||
//print dol_string_onlythesehtmltags('"How are you" is a French expression and this is an HTML <a> tag', 1, 1, 1);
|
||||
print dol_string_onlythesehtmltags($generatedContent, 1, 1, 1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2026 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2026 Nick Fragoulis
|
||||
* Copyright (C) 2026 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
|
||||
|
|
@ -659,7 +660,7 @@ class ToolProducts extends McpTool
|
|||
*
|
||||
* @param float $virtual_stock Current virtual stock (Physical + Incoming - Outgoing).
|
||||
* @param float $min_stock_alert Minimum stock alert level (Seuil alerte).
|
||||
* @param float $desired_stock Desired stock level (Stock désiré).
|
||||
* @param float $desired_stock Desired stock level.
|
||||
* @param float $dailyBurnRate Estimated daily consumption rate.
|
||||
*
|
||||
* @return array{action: string, urgency: string, suggested_qty: int, reason: string}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2013 Christophe Battarel <christophe.battarel@altairis.fr>
|
||||
* Copyright (C) 2013 Cédric Salvado <csalvador@gpcsolutions.fr>
|
||||
* Copyright (C) 2015-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2015-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2016-2023 Ferran Marcet <fmarcet@2byte.es>
|
||||
|
|
@ -3013,7 +3013,7 @@ while ($i < $imaxinloop) {
|
|||
print '</a>';
|
||||
|
||||
if (!empty($shippableInfos['warning'])) {
|
||||
// On ne remonte plus le détail textwarning, mais on garde l’icône d’avertissement
|
||||
// We no longer show the textwarning detail, but we keep the warning icon
|
||||
print $form->textwithtooltip('', $langs->trans("NotEnoughForAllOrders"), 2, 1, img_picto('', 'error', '', 0, 0, 0, '', '2'), '', 2);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ if (empty($user->socid)) {
|
|||
|
||||
$checkedtypetiers = 0;
|
||||
$arrayfields = array(
|
||||
// Détail commande
|
||||
// Order detail
|
||||
'rowid' => array('label' => 'LineID', 'checked' => '-1', 'position' => 1, 'enabled' => '1'),
|
||||
'c.ref' => array('label' => "RefOrder", 'checked' => '1', 'position' => 5),
|
||||
'pr.ref' => array('label' => 'ProductRef', 'checked' => '1', 'position' => 6),
|
||||
|
|
@ -754,7 +754,7 @@ if ($resql) {
|
|||
if ($search_id) {
|
||||
$param .= '&search_id='.urlencode($search_id);
|
||||
}
|
||||
// Détail commande
|
||||
// Order detail
|
||||
if ($search_refProduct) {
|
||||
$param .= '&search_refProduct='.urlencode($search_refProduct);
|
||||
}
|
||||
|
|
@ -1511,7 +1511,7 @@ if ($resql) {
|
|||
$total_margin = 0;
|
||||
|
||||
|
||||
// Détail commande
|
||||
// Order detail
|
||||
$totalqty = 0;
|
||||
$oldref = null;
|
||||
|
||||
|
|
|
|||
|
|
@ -288,7 +288,7 @@ if ($result < 0) {
|
|||
$error++;
|
||||
setEventMessages($langs->trans("ErrorFailedToCreateDir"), null, 'errors');
|
||||
} else {
|
||||
// Calcul de $min et $max
|
||||
// Calculate $min and $max
|
||||
$sql = "SELECT MIN(b.datev) as min, MAX(b.datev) as max";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
|
|
@ -311,7 +311,7 @@ if ($result < 0) {
|
|||
}
|
||||
|
||||
// CRED PART
|
||||
// Chargement du tableau des années
|
||||
// Load the year array
|
||||
$tblyear = array();
|
||||
'@phan-var-force array<array<string,int|float>> $tblyear';
|
||||
$tblyear[0] = array();
|
||||
|
|
@ -347,7 +347,7 @@ if ($result < 0) {
|
|||
dol_print_error($db);
|
||||
}
|
||||
}
|
||||
// Chargement de labels et data_xxx pour tableau 4 Movements
|
||||
// Load labels and data_xxx for the 4 Movements chart
|
||||
$labels = array();
|
||||
$data_year_0 = array();
|
||||
$data_year_1 = array();
|
||||
|
|
@ -396,7 +396,7 @@ if ($result < 0) {
|
|||
unset($tblyear[2]);
|
||||
|
||||
// DEDBT PART
|
||||
// Chargement du tableau des années
|
||||
// Load the year array
|
||||
$tblyear[0] = array();
|
||||
$tblyear[1] = array();
|
||||
$tblyear[2] = array();
|
||||
|
|
@ -431,7 +431,7 @@ if ($result < 0) {
|
|||
}
|
||||
}
|
||||
|
||||
// Chargement de labels et data_xxx pour tableau 4 Movements
|
||||
// Load labels and data_xxx for the 4 Movements chart
|
||||
$labels = array();
|
||||
$data_year_0 = array();
|
||||
$data_year_1 = array();
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ if ($result < 0) {
|
|||
$error++;
|
||||
setEventMessages($langs->trans("ErrorFailedToCreateDir"), null, 'errors');
|
||||
} else {
|
||||
// Calcul $min and $max
|
||||
// Calculate $min and $max
|
||||
$sql = "SELECT MIN(b.datev) as min, MAX(b.datev) as max";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
|
|
@ -470,7 +470,7 @@ if ($result < 0) {
|
|||
dol_print_error($db);
|
||||
}
|
||||
|
||||
// Calcul de $solde avant le debut du graphe
|
||||
// Calculate $solde before the start of the graph
|
||||
$solde = 0;
|
||||
|
||||
// Loading labels and datas for dashboard 3
|
||||
|
|
@ -561,7 +561,7 @@ if ($result < 0) {
|
|||
// Graph input/output - Credit/Debit for the month
|
||||
|
||||
if ($mode == 'standard') {
|
||||
// Chargement du tableau $credits, $debits
|
||||
// Load the $credits, $debits arrays
|
||||
$credits = array();
|
||||
$debits = array();
|
||||
|
||||
|
|
@ -682,7 +682,7 @@ if ($result < 0) {
|
|||
// Tableau 4b - Credit/Debit
|
||||
|
||||
if ($mode == 'standard') {
|
||||
// Chargement du tableau $credits, $debits
|
||||
// Load the $credits, $debits arrays
|
||||
$credits = array();
|
||||
$debits = array();
|
||||
$sql = "SELECT date_format(b.datev,'%m')";
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
* Copyright (C) 2017 Patrick Delcroix <pmpdelcroix@gmail.com>
|
||||
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -481,7 +481,7 @@ if (empty($numref)) {
|
|||
print '<td> </td>';
|
||||
print "</tr>\n";
|
||||
|
||||
// Calcul du solde de depart du releve
|
||||
// Calculate the opening balance of the statement
|
||||
$sql = "SELECT sum(b.amount) as amount";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
$sql .= " WHERE b.num_releve < '".$db->escape($numref)."'";
|
||||
|
|
|
|||
|
|
@ -1191,7 +1191,7 @@ if (empty($reshook)) {
|
|||
$discount->multicurrency_total_tva = -((float) $multicurrency_amount_tva[$tva_tx]);
|
||||
$discount->multicurrency_total_ttc = -((float) $multicurrency_amount_ttc[$tva_tx]);
|
||||
} else {
|
||||
//We keep the absolute value to be consistent with the function used to create the discount in case of deposit in the “create” function of the Payment class
|
||||
//We keep the absolute value to be consistent with the function used to create the discount in case of deposit in the "create" function of the Payment class
|
||||
$discount->amount_ht = abs((float) $amount_ht[$tva_tx]);
|
||||
$discount->amount_tva = abs((float) $amount_tva[$tva_tx]);
|
||||
$discount->amount_ttc = abs((float) $amount_ttc[$tva_tx]);
|
||||
|
|
@ -3494,7 +3494,7 @@ if (empty($reshook)) {
|
|||
|
||||
// Change each progression percent on each lines
|
||||
foreach ($object->lines as $line) {
|
||||
// no traitement for special product
|
||||
// no processing for special product
|
||||
if ($line->product_type == 9) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -4788,7 +4788,7 @@ if ($action == 'create') {
|
|||
// TODO for compatibility
|
||||
if ($origin == 'contrat') {
|
||||
'@phan-var-force Contrat $objectsrc';
|
||||
// Calcul contrat->price (HT), contrat->total (TTC), contrat->tva
|
||||
// Recalculate contrat->price (excl. VAT), contrat->total (incl. VAT), contrat->tva
|
||||
$objectsrc->update_price(1, 'auto', 1);
|
||||
}
|
||||
|
||||
|
|
@ -5578,7 +5578,7 @@ if ($action == 'create') {
|
|||
|
||||
if (getDolGlobalString('INVOICE_POINTOFTAX_DATE')) {
|
||||
// Date invoice point of tax (Leistungsdatum / service date for tax).
|
||||
// Only editable while the invoice is a draft — once validated, the
|
||||
// Only editable while the invoice is a draft -- once validated, the
|
||||
// invoice is a legally issued document and date_pointoftax is the
|
||||
// basis for the VAT-return period assignment under accrual taxation
|
||||
// (Soll-Versteuerung). To correct, set the invoice back to draft or
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
* Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2011-2025 Alexandre spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2013 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2018-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -166,7 +166,7 @@ if ($result) {
|
|||
$i = 0;
|
||||
while ($i < $num) {
|
||||
$obj = $db->fetch_object($result);
|
||||
// contrôles
|
||||
// checks
|
||||
$compta_soc = (($obj->code_compta_fournisseur != "") ? $obj->code_compta_fournisseur : $cptfour);
|
||||
$compta_prod = $obj->accountancy_code_buy;
|
||||
if (empty($compta_prod)) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2011-2016 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -680,9 +680,9 @@ class RemiseCheque extends CommonObject
|
|||
}
|
||||
|
||||
/**
|
||||
* Mets a jour le montant total
|
||||
* Update the total amount
|
||||
*
|
||||
* @return int 0 en cas de success
|
||||
* @return int 0 on success
|
||||
*/
|
||||
public function updateAmount()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Copyright (C) 2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -242,7 +242,7 @@ class PaymentSocialContribution extends CommonObject
|
|||
if ($resql) {
|
||||
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."paiementcharge");
|
||||
|
||||
// Insere tableau des montants / factures
|
||||
// Insert amounts / invoices array
|
||||
foreach ($this->amounts as $key => $amount) {
|
||||
$contribid = $key;
|
||||
if (is_numeric($amount) && $amount != 0) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2012-2023 Charlene BENKE <charlene@patas-monkey.com>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -188,7 +188,7 @@ print '<td align="center" nowrap >'.$langs->trans("DateEnd").'</td>';
|
|||
print '<td align="right">'.$langs->trans("Progress").'</td>';
|
||||
print '<td align="right" width="100">'.$langs->trans("Status").'</td>';
|
||||
print '</tr>';
|
||||
// on récupère la totalité des tickets liés au contrat
|
||||
// retrieve all tickets linked to the contract
|
||||
$allticketarray = $object->getTicketsArray();
|
||||
if (is_array($allticketarray) && count($allticketarray) > 0) {
|
||||
foreach ($allticketarray as $key => $value) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024 William Mead <william.mead@manchenumerique.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -724,7 +724,7 @@ if ($action == "importSignature") {
|
|||
}
|
||||
foreach ($dirmodels as $reldir) {
|
||||
$file = "pdf_" . $last_modelpdf . ".modules.php";
|
||||
// On vérifie l'emplacement du modele
|
||||
// Check the template location
|
||||
$file = dol_buildpath($reldir . $modelpath . $file, 0);
|
||||
if (file_exists($file)) {
|
||||
$filefound = $file;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2015-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2015-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
/**
|
||||
* \file htdocs/core/boxes/box_clients.php
|
||||
* \ingroup invoice
|
||||
* \brief Module d'affichage pour les encours dépassés
|
||||
* \brief Display module for exceeded outstanding amounts
|
||||
*/
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/boxes/modules_boxes.php';
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2004-2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2015-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2015-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -218,7 +218,7 @@ class box_factures_fourn_imp extends ModeleBoxes
|
|||
$objp = $this->db->fetch_object($result);
|
||||
$totalamount = $objp->total_ht;
|
||||
|
||||
// Add the sum à the bottom of the boxes
|
||||
// Add the sum to the bottom of the boxes
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'tr' => 'class="liste_total_wrap"',
|
||||
'td' => 'class="liste_total"',
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2015-2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2015-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
|
||||
*
|
||||
|
|
@ -233,7 +233,7 @@ class box_factures_imp extends ModeleBoxes
|
|||
$objp = $this->db->fetch_object($result);
|
||||
$totalamount = $objp->total_ht;
|
||||
|
||||
// Add the sum à the bottom of the boxes
|
||||
// Add the sum to the bottom of the boxes
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'tr' => 'class="liste_total"',
|
||||
'td' => 'class="liste_total"',
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2012-2014 Charles-François BENKE <charles.fr@benke.fr>
|
||||
* Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2015-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2015-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2016 Juan José Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2020 Pierre Ardoin <mapiolca@me.com>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
|
|
@ -183,7 +183,7 @@ class box_project extends ModeleBoxes
|
|||
}
|
||||
|
||||
if ($num > 0) {
|
||||
// Add the sum à the bottom of the boxes
|
||||
// Add the sum to the bottom of the boxes
|
||||
$this->info_box_contents[$i][] = array(
|
||||
'tr' => 'class="liste_total_wrap"',
|
||||
'td' => 'class="liste_total"',
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2012-2014 Charles-François BENKE <charles.fr@benke.fr>
|
||||
* Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2015-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2015-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2016 Juan José Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2020 Pierre Ardoin <mapiolca@me.com>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
|
|
@ -168,7 +168,7 @@ class box_project_opportunities extends ModeleBoxes
|
|||
}
|
||||
|
||||
if ($num > 0) {
|
||||
// Add the sum à the bottom of the boxes
|
||||
// Add the sum to the bottom of the boxes
|
||||
$this->info_box_contents[$i][] = array(
|
||||
'tr' => 'class="liste_total_wrap"',
|
||||
'td' => 'class="liste_total"',
|
||||
|
|
|
|||
|
|
@ -2364,13 +2364,13 @@ abstract class CommonInvoice extends CommonObject
|
|||
$complementaryinfo = '';
|
||||
/*
|
||||
Example: //S1/10/10201409/11/190512/20/1400.000-53/30/106017086/31/180508/32/7.7/40/2:10;0:30
|
||||
/10/ Numéro de facture – 10201409
|
||||
/11/ Date de facture – 12.05.2019
|
||||
/20/ Référence client – 1400.000-53
|
||||
/30/ Numéro IDE pour la TVA – CHE-106.017.086 TVA
|
||||
/31/ Date de la prestation pour la comptabilisation de la TVA – 08.05.2018
|
||||
/32/ Taux de TVA sur le montant total de la facture – 7.7%
|
||||
/40/ Conditions – 2% d’escompte à 10 jours, paiement net à 30 jours
|
||||
/10/ Invoice number -- 10201409
|
||||
/11/ Invoice date -- 12.05.2019
|
||||
/20/ Customer reference -- 1400.000-53
|
||||
/30/ VAT IDE number -- CHE-106.017.086 TVA
|
||||
/31/ Service date for VAT accounting -- 08.05.2018
|
||||
/32/ VAT rate on total invoice amount -- 7.7%
|
||||
/40/ Terms -- 2% discount at 10 days, net payment at 30 days
|
||||
*/
|
||||
$datestring = dol_print_date($this->date, '%y%m%d');
|
||||
//$pricewithtaxstring = price($this->total_ttc, 0, $tmplang, 0, -1, 2);
|
||||
|
|
@ -2391,7 +2391,7 @@ abstract class CommonInvoice extends CommonObject
|
|||
$s .= "SPC\n";
|
||||
$s .= "0200\n";
|
||||
$s .= "1\n";
|
||||
// Info Seller ("Compte / Payable à")
|
||||
// Info Seller ("Account / Payable to")
|
||||
if ($this->fk_account > 0) {
|
||||
// Bank BAN if country is LI or CH. TODO Add a test to check than IBAN start with CH or LI
|
||||
$bankaccount->fetch($this->fk_account);
|
||||
|
|
@ -2420,7 +2420,7 @@ abstract class CommonInvoice extends CommonObject
|
|||
$s .= dol_trunc($mysoc->town, 35, 'right', 'UTF-8', 1)."\n";
|
||||
$s .= dol_trunc($mysoc->country_code, 2, 'right', 'UTF-8', 1)."\n";
|
||||
}
|
||||
// Final seller (Ultimate seller) ("Créancier final" = "En faveur de")
|
||||
// Final seller (Ultimate seller) ("Final creditor" = "In favour of")
|
||||
$s .= "\n";
|
||||
$s .= "\n";
|
||||
$s .= "\n";
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2007-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -464,13 +464,13 @@ class CUnits extends CommonDict
|
|||
$value = (float) price2num($value);
|
||||
$fk_unit = intval($fk_unit);
|
||||
|
||||
// Calcul en unité de base
|
||||
// Calculate in base unit
|
||||
$scaleUnitPow = $this->scaleOfUnitPow($fk_unit);
|
||||
|
||||
// convert to standard unit
|
||||
$value *= $scaleUnitPow;
|
||||
if ($fk_new_unit != 0) {
|
||||
// Calcul en unité de base
|
||||
// Calculate in base unit
|
||||
$scaleUnitPow = $this->scaleOfUnitPow($fk_new_unit);
|
||||
if (!empty($scaleUnitPow)) {
|
||||
// convert to new unit
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024 Alexandre Janniaux <alexandre.janniaux@gmail.com>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Noé Cendrier <noe.cendrier@altairis.fr>
|
||||
* Copyright (C) 2026 Vincent de Grandpré <vincent@de-grandpre.quebec>
|
||||
|
|
@ -1010,8 +1010,8 @@ class DiscountAbsolute extends CommonObject
|
|||
}
|
||||
|
||||
if (empty($this->amount_ttc)) {
|
||||
// Dans le cas où le montant ttc vient d'une remise scindée on le prend tel quel
|
||||
// car de recalculer le montant ttc à partir du montant ht créé des erreurs de précision.
|
||||
// If the total amount comes from a split discount, we take it as-is
|
||||
// because recalculating the total amount from the net amount creates precision errors.
|
||||
$this->amount_ttc = price2num((float) $this->amount_ht + (float) $this->amount_tva + $this->total_localtax1 + $this->total_localtax2, 'MT');
|
||||
$this->multicurrency_amount_ttc = price2num(((float) $this->amount_ht + (float) $this->amount_tva + $this->total_localtax1 + $this->total_localtax2) * (float) $this->multicurrency_tx, 'MT');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (c) 2015-2019 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -123,7 +123,7 @@ class FormMargin
|
|||
|
||||
// calcul des marges
|
||||
if (isset($line->fk_remise_except) && isset($conf->global->MARGIN_METHODE_FOR_DISCOUNT)) { // remise
|
||||
if (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '1') { // remise globale considérée comme produit
|
||||
if (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '1') { // global discount treated as product
|
||||
$marginInfos['pa_products'] += $pa;
|
||||
$marginInfos['pv_products'] += $pv;
|
||||
$marginInfos['pa_total'] += $pa;
|
||||
|
|
@ -135,7 +135,7 @@ class FormMargin
|
|||
//}
|
||||
//else
|
||||
$marginInfos['margin_on_products'] += $pv - $pa;
|
||||
} elseif (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '2') { // remise globale considérée comme service
|
||||
} elseif (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '2') { // global discount treated as service
|
||||
$marginInfos['pa_services'] += $pa;
|
||||
$marginInfos['pv_services'] += $pv;
|
||||
$marginInfos['pa_total'] += $pa;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -260,7 +260,7 @@ class DoliDBSqlite3 extends DoliDB
|
|||
$line .= "CREATE ".(preg_match('/UNIQUE/', $reg[2]) ? 'UNIQUE ' : '')."INDEX ".$idxname." ON ".$tablename." (".$fieldlist.")";
|
||||
}
|
||||
if (preg_match('/ALTER\s+TABLE\s*(.*)\s*ADD\s+CONSTRAINT\s+(.*)\s*FOREIGN\s+KEY\s*\(([\w,\s]+)\)\s*REFERENCES\s+(\w+)\s*\(([\w,\s]+)\)/i', $line, $reg)) {
|
||||
// Pour l'instant les contraintes ne sont pas créées
|
||||
// Constraints are not yet created
|
||||
dol_syslog(get_class().'::query line emptied');
|
||||
$line = 'SELECT 0;';
|
||||
}
|
||||
|
|
@ -347,7 +347,7 @@ class DoliDBSqlite3 extends DoliDB
|
|||
return false;
|
||||
}
|
||||
|
||||
//print "Resultat fonction connect: ".$this->db;
|
||||
//print "Result of connect function: ".$this->db;
|
||||
return $this->db;
|
||||
}
|
||||
|
||||
|
|
@ -417,8 +417,8 @@ class DoliDBSqlite3 extends DoliDB
|
|||
// Convert MySQL syntax to SQLite syntax
|
||||
$reg = array();
|
||||
if (preg_match('/ALTER\s+TABLE\s*(.*)\s*ADD\s+CONSTRAINT\s+(.*)\s*FOREIGN\s+KEY\s*\(([\w,\s]+)\)\s*REFERENCES\s+(\w+)\s*\(([\w,\s]+)\)/i', $query, $reg)) {
|
||||
// Ajout d'une clef étrangère à la table
|
||||
// procédure de replacement de la table pour ajouter la contrainte
|
||||
// Adding a foreign key to the table
|
||||
// table replacement procedure to add the constraint
|
||||
// Example : ALTER TABLE llx_adherent ADD CONSTRAINT adherent_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid)
|
||||
// -> CREATE TABLE ( ... ,CONSTRAINT adherent_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid))
|
||||
$foreignFields = $reg[5];
|
||||
|
|
@ -619,8 +619,7 @@ class DoliDBSqlite3 extends DoliDB
|
|||
if (preg_match("/^SELECT/i", $this->queryString)) {
|
||||
return $this->num_rows($resultset);
|
||||
}
|
||||
// mysql necessite un link de base pour cette fonction contrairement
|
||||
// a pqsql qui prend un resultset
|
||||
// mysql requires a base link for this function, unlike pgsql which takes a resultset
|
||||
return $this->db->changes();
|
||||
}
|
||||
|
||||
|
|
@ -1350,8 +1349,8 @@ class DoliDBSqlite3 extends DoliDB
|
|||
$result = array();
|
||||
static $pragmas;
|
||||
if (!isset($pragmas)) {
|
||||
// Définition de la liste des pragmas utilisés qui ne retournent qu'une seule valeur
|
||||
// indépendante de la base de données.
|
||||
// Define the list of pragmas used that return only a single value
|
||||
// independent of the database.
|
||||
// cf. http://www.sqlite.org/pragma.html
|
||||
$pragmas = array(
|
||||
'application_id', 'auto_vacuum', 'automatic_index', 'busy_timeout', 'cache_size',
|
||||
|
|
@ -1379,7 +1378,7 @@ class DoliDBSqlite3 extends DoliDB
|
|||
//dol_syslog(get_class($this)."::select_db getServerParametersValues $var=". print_r($obj, true), LOG_DEBUG);
|
||||
$result[$var] = $obj[0];
|
||||
} else {
|
||||
// TODO Récupérer le message
|
||||
// TODO Retrieve the message
|
||||
$result[$var] = 'FAIL';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1070,7 +1070,7 @@ function GETPOSTDATE($prefix, $hourTime = '', $gm = 'auto', $saverestore = '')
|
|||
* 'restricthtmlallowiframe'
|
||||
* 'restricthtmlallowlinkscript'
|
||||
* @param int $method Type of method (0 = get then post, 1 = only get, 2 = only post, 3 = post then get)
|
||||
* @param ?int $filter Filter to apply when $check is set to 'custom'. (See http://php.net/manual/en/filter.filters.php for détails)
|
||||
* @param ?int $filter Filter to apply when $check is set to 'custom'. (See http://php.net/manual/en/filter.filters.php for details)
|
||||
* @param mixed $options Options to pass to filter_var when $check is set to 'custom'
|
||||
* @param int $noreplace Force disable of replacement of __xxx__ strings.
|
||||
* @return string|array<mixed> Value found (string or array), or '' if check fails
|
||||
|
|
@ -1355,7 +1355,7 @@ function GETPOST($paramname, $check = 'alphanohtml', $method = 0, $filter = null
|
|||
*
|
||||
* @param string|mixed[]|null $out Value to check/clear.
|
||||
* @param string $check Type of check/sanitizing
|
||||
* @param ?int $filter Filter to apply when $check is set to 'custom' (deprecated). (See http://php.net/manual/en/filter.filters.php for détails)
|
||||
* @param ?int $filter Filter to apply when $check is set to 'custom' (deprecated). (See http://php.net/manual/en/filter.filters.php for details)
|
||||
* @param ?mixed $options Options to pass to filter_var when $check is set to 'custom'
|
||||
* @return string|array<mixed> Value sanitized (string or array). It may be '' if format check fails.
|
||||
*/
|
||||
|
|
@ -2416,7 +2416,7 @@ function dolPrintHTML($s, $allowiframe = 0, $moreallowedtags = array())
|
|||
//$isAlreadyHTML = dol_textishtml($s);
|
||||
|
||||
// dol_htmlentitiesbr encode all chars except "'" if string is not already HTML, but
|
||||
// encode only special char like é but not &, <, >, ", ' if already HTML.
|
||||
// encode only special char like accented chars but not &, <, >, ", ' if already HTML.
|
||||
$stringWithEntitesForSpecialChar = dol_htmlentitiesbr((string) $s);
|
||||
|
||||
$allowedtags = 'common';
|
||||
|
|
@ -2530,7 +2530,7 @@ function dol_escape_htmltag($stringtoescape, $keepb = 0, $keepn = 0, $noescapeta
|
|||
} else {
|
||||
// We make a manipulation by calling the html_entity_decode() to convert content into NON HTML UTF8 string.
|
||||
// Because content can be or not already HTML.
|
||||
// For example, this decode è into è so string is UTF8 (but numbers entities like ' is not decoded).
|
||||
// For example, this decode è into its UTF-8 char so string is UTF8 (but numbers entities like ' is not decoded).
|
||||
// In a future, we should not need this
|
||||
|
||||
$tmp = (string) $stringtoescape;
|
||||
|
|
@ -4897,7 +4897,7 @@ function dol_print_phone($phone, $countrycode = '', $contactid = 0, $socid = 0,
|
|||
if (dol_strlen($phone) == 12) { //ex: +223 AB_CD_EF_GH
|
||||
$newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 2) . $separ . substr($newphone, 6, 2) . $separ . substr($newphone, 8, 2) . $separ . substr($newphone, 10, 2);
|
||||
}
|
||||
} elseif (strtoupper($countrycode) == "TH") { //Thaïlande
|
||||
} elseif (strtoupper($countrycode) == "TH") { //Thailand
|
||||
if (dol_strlen($phone) == 11) { //ex: +66_ABC_DE_FGH
|
||||
$newphone = substr($newphone, 0, 3) . $separ . substr($newphone, 3, 3) . $separ . substr($newphone, 6, 2) . $separ . substr($newphone, 8, 3);
|
||||
} elseif (dol_strlen($phone) == 12) { //ex: +66_A_BCD_EF_GHI
|
||||
|
|
@ -4928,7 +4928,7 @@ function dol_print_phone($phone, $countrycode = '', $contactid = 0, $socid = 0,
|
|||
} elseif (dol_strlen($phone) == 14) { //ex: +971_ABC_DEF_GHIK
|
||||
$newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 3) . $separ . substr($newphone, 7, 3) . $separ . substr($newphone, 10, 4);
|
||||
}
|
||||
} elseif (strtoupper($countrycode) == "DZ") { //Algérie
|
||||
} elseif (strtoupper($countrycode) == "DZ") { //Algeria
|
||||
if (dol_strlen($phone) == 13) { //ex: +213_ABC_DEF_GHI
|
||||
$newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 3) . $separ . substr($newphone, 7, 3) . $separ . substr($newphone, 10, 3);
|
||||
}
|
||||
|
|
@ -4938,7 +4938,7 @@ function dol_print_phone($phone, $countrycode = '', $contactid = 0, $socid = 0,
|
|||
} elseif (dol_strlen($phone) == 12) { //ex: +32_ABC_DEF_GHI
|
||||
$newphone = substr($newphone, 0, 3) . $separ . substr($newphone, 3, 3) . $separ . substr($newphone, 6, 3) . $separ . substr($newphone, 9, 3);
|
||||
}
|
||||
} elseif (strtoupper($countrycode) == "PF") { //Polynésie française
|
||||
} elseif (strtoupper($countrycode) == "PF") { //French Polynesia
|
||||
if (dol_strlen($phone) == 12) { //ex: +689_AB_CD_EF_GH
|
||||
$newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 2) . $separ . substr($newphone, 6, 2) . $separ . substr($newphone, 8, 2) . $separ . substr($newphone, 10, 2);
|
||||
}
|
||||
|
|
@ -4950,7 +4950,7 @@ function dol_print_phone($phone, $countrycode = '', $contactid = 0, $socid = 0,
|
|||
if (dol_strlen($phone) == 12) { //ex: +962_A_BCD_EF_GH
|
||||
$newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 1) . $separ . substr($newphone, 5, 3) . $separ . substr($newphone, 7, 2) . $separ . substr($newphone, 9, 2);
|
||||
}
|
||||
} elseif (strtoupper($countrycode) == "JM") { //Jamaïque
|
||||
} elseif (strtoupper($countrycode) == "JM") { //Jamaica
|
||||
if (dol_strlen($newphone) == 12) { //ex: +1867_ABC_DEFG
|
||||
$newphone = substr($newphone, 0, 5) . $separ . substr($newphone, 5, 3) . $separ . substr($newphone, 8, 4);
|
||||
}
|
||||
|
|
@ -5516,15 +5516,15 @@ function dol_substr($string, $start, $length = null, $stringencoding = '', $trun
|
|||
|
||||
|
||||
/**
|
||||
* Truncate a string to a particular length adding '…' if string larger than length.
|
||||
* If length = max length+1, we do no truncate to avoid having just 1 char replaced with '…'.
|
||||
* Truncate a string to a particular length adding '...' if string larger than length.
|
||||
* If length = max length+1, we do no truncate to avoid having just 1 char replaced with '...'.
|
||||
* MAIN_DISABLE_TRUNC=1 can disable all truncings
|
||||
*
|
||||
* @param string $string String to truncate
|
||||
* @param int $size Max string size visible (excluding …). 0 for no limit. WARNING: Final string size can have 3 more chars (if we added …, or if size was max+1 so it does not worse to replace with ...)
|
||||
* @param int $size Max string size visible (excluding '...'). 0 for no limit. WARNING: Final string size can have 3 more chars (if we added '...', or if size was max+1 so it does not worse to replace with ...)
|
||||
* @param string $trunc Where to trunc: 'right', 'left', 'middle' (size must be a 2 power), 'wrap'
|
||||
* @param string $stringencoding Tell what is source string encoding
|
||||
* @param int $nodot Truncation do not add … after truncation. So it's an exact truncation.
|
||||
* @param int $nodot Truncation do not add '...' after truncation. So it's an exact truncation.
|
||||
* @param int $display Trunc is used to display data and can be changed for small screen. TODO Remove this param (must be dealt with CSS)
|
||||
* @return string Truncated string. WARNING: length is never higher than $size if $nodot is set, but can be 3 chars higher otherwise.
|
||||
*/
|
||||
|
|
@ -5548,7 +5548,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF
|
|||
if ($trunc == 'right') {
|
||||
$newstring = dol_textishtml($string) ? dol_string_nohtmltag($string, 1) : $string;
|
||||
if (dol_strlen($newstring, $stringencoding) > ($size + ($nodot ? 0 : 1))) {
|
||||
// If nodot is 0 and size is 1 chars more, we don't trunc and don't add …
|
||||
// If nodot is 0 and size is 1 chars more, we don't trunc and don't add '...'
|
||||
return dol_substr($newstring, 0, $size, $stringencoding) . ($nodot ? '' : '…');
|
||||
} else {
|
||||
//return 'u'.$size.'-'.$newstring.'-'.dol_strlen($newstring,$stringencoding).'-'.$string;
|
||||
|
|
@ -5566,7 +5566,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF
|
|||
} elseif ($trunc == 'left') {
|
||||
$newstring = dol_textishtml($string) ? dol_string_nohtmltag($string, 1) : $string;
|
||||
if (dol_strlen($newstring, $stringencoding) > ($size + ($nodot ? 0 : 1))) {
|
||||
// If nodot is 0 and size is 1 chars more, we don't trunc and don't add …
|
||||
// If nodot is 0 and size is 1 chars more, we don't trunc and don't add '...'
|
||||
return '…' . dol_substr($newstring, dol_strlen($newstring, $stringencoding) - $size, $size, $stringencoding);
|
||||
} else {
|
||||
return $string;
|
||||
|
|
@ -5588,7 +5588,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF
|
|||
*
|
||||
* @param string $key Key
|
||||
* @param string $morecss Add more css to the object
|
||||
* @return string Pïcto for the key
|
||||
* @return string Picto for the key
|
||||
*/
|
||||
function getPictoForType($key, $morecss = '')
|
||||
{
|
||||
|
|
@ -7816,8 +7816,8 @@ function price($amount, $form = 0, $outlangs = '', $trunc = 1, $rounding = -1, $
|
|||
* Default 0 if unknown.
|
||||
* @return string Amount with universal numeric format (Example: '99.99999'), or error message.
|
||||
* If conversion fails to return a numeric, it returns:
|
||||
* - text unchanged or partial if ($rounding = ''): price2num('W9ç', '', 0) => '9ç', price2num('W9ç', '', 1) => 'W9ç', price2num('W9ç', '', 2) => '9ç'
|
||||
* - '0' if ($rounding is defined): price2num('W9ç', 'MT', 0) => '9', price2num('W9ç', 'MT', 1) => '0', price2num('W9ç', 'MT', 2) => '9'
|
||||
* - text unchanged or partial if ($rounding = ''): price2num('W9c', '', 0) => '9c', price2num('W9c', '', 1) => 'W9c', price2num('W9c', '', 2) => '9c'
|
||||
* - '0' if ($rounding is defined): price2num('W9c', 'MT', 0) => '9', price2num('W9c', 'MT', 1) => '0', price2num('W9c', 'MT', 2) => '9'
|
||||
* Note: The best way to guarantee a numeric value is to add a cast (float) before the price2num().
|
||||
* If amount is null or '', it returns '' if $rounding = '', it returns '0' if $rounding is defined.
|
||||
*
|
||||
|
|
@ -12164,7 +12164,7 @@ function dol_eval_new($s)
|
|||
];
|
||||
|
||||
$prohibited_token_arrangements = [
|
||||
// Variable functions « $a( », « "$a"( », « 'FN_NAME'( », ('FN_NAME')()
|
||||
// Variable functions "$a(", '"$a"(', "'FN_NAME'(", ('FN_NAME')()
|
||||
' T_VARIABLE ( ',
|
||||
' " ( ',
|
||||
' \' ( ',
|
||||
|
|
@ -15615,7 +15615,7 @@ function getElementProperties($elementType)
|
|||
|
||||
if ($reshook) {
|
||||
$elementProperties = $hookmanager->resArray;
|
||||
} elseif (!empty($hookmanager->resArray) && is_array($hookmanager->resArray)) { // resArray is always an array but for sécurity against misconfigured external modules
|
||||
} elseif (!empty($hookmanager->resArray) && is_array($hookmanager->resArray)) { // resArray is always an array but for security against misconfigured external modules
|
||||
$elementProperties = array_replace($elementProperties, $hookmanager->resArray);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
* Copyright (C) 2015-2016 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
* Copyright (C) 2017 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -921,7 +921,7 @@ function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $
|
|||
$maskjournal_value = '';
|
||||
}
|
||||
|
||||
// Personalized field {XXX-1} à {XXX-99}
|
||||
// Personalized field {XXX-1} to {XXX-99}
|
||||
$maskperso = array();
|
||||
$maskpersonew = array();
|
||||
$tmpmask = $mask;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2009-2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -651,7 +651,7 @@ function reWriteAllPermissions($file, $permissions, $key, $right, $objectname, $
|
|||
// parcourir les objects
|
||||
$o = 0;
|
||||
foreach ($permissions as &$object) {
|
||||
// récupérer la permission de l'objet
|
||||
// get the object permission
|
||||
$p = 1;
|
||||
foreach ($object as &$obj) {
|
||||
if (str_contains($obj[5], 'read')) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/* Copyright (C) 2006-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2022 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2022-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -104,7 +104,7 @@ function isValidSiret($siret, $lengthonly = 0)
|
|||
|
||||
/**
|
||||
* Check the syntax validity of a Portuguese (PT) Tax Identification Number (TIN).
|
||||
* (NIF = Número de Identificação Fiscal)
|
||||
* (NIF = Numero de Identificacao Fiscal)
|
||||
*
|
||||
* @param string $str NIF to check
|
||||
* @return boolean True if valid, False otherwise
|
||||
|
|
@ -125,7 +125,7 @@ function isValidTinForPT($str)
|
|||
|
||||
/**
|
||||
* Check the syntax validity of an Algerian (DZ) Tax Identification Number (TIN).
|
||||
* (NIF = Numéro d'Identification Fiscale)
|
||||
* (NIF = Tax Identification Number)
|
||||
*
|
||||
* @param string $str TIN to check
|
||||
* @return boolean True if valid, False otherwise
|
||||
|
|
@ -146,7 +146,7 @@ function isValidTinForDZ($str)
|
|||
|
||||
/**
|
||||
* Check the syntax validity of a Belgium (BE) Tax Identification Number (TIN).
|
||||
* (NN = Numéro National)
|
||||
* (NN = National Number)
|
||||
*
|
||||
* @param string $str NN to check
|
||||
* @return boolean True if valid, False otherwise
|
||||
|
|
@ -168,9 +168,9 @@ function isValidTinForBE($str)
|
|||
|
||||
/**
|
||||
* Check the syntax validity of a Spanish (ES) Tax Identification Number (TIN), where:
|
||||
* - NIF = Número de Identificación Fiscal (used for residents only before 2008. Used for both residents and companies since 2008.)
|
||||
* - CIF = Código de Identificación Fiscal (used for companies only before 2008. Replaced by NIF since 2008.)
|
||||
* - NIE = Número de Identidad de Extranjero
|
||||
* - NIF = Numero de Identificacion Fiscal (used for residents only before 2008. Used for both residents and companies since 2008.)
|
||||
* - CIF = Codigo de Identificacion Fiscal (used for companies only before 2008. Replaced by NIF since 2008.)
|
||||
* - NIE = Numero de Identidad de Extranjero
|
||||
*
|
||||
* @param string $str TIN to check
|
||||
* @return int<-4,3> 1 if NIF ok, 2 if CIF ok, 3 if NIE ok, -1 if NIF bad, -2 if CIF bad, -3 if NIE bad, -4 if unexpected bad
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -1422,7 +1422,7 @@ function getImageFromHtmlContent($htmlContent, $imageNumber = 1)
|
|||
|
||||
// Check if nb of image is valid
|
||||
if ($imageNumber > 0 && $imageNumber <= $images->length) {
|
||||
// Récupère l'image correspondante (index - 1 car $imageNumber est 1-based)
|
||||
// Get the corresponding image (index - 1 because $imageNumber is 1-based)
|
||||
$img = $images->item($imageNumber - 1);
|
||||
if ($img instanceof DOMElement) {
|
||||
return $img->getAttribute('src');
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Copyright (C) 2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2015 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2016-2023 Philippe Grand <philippe.grand@atoo-net.com>
|
||||
* Copyright (C) 2018-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018 Francis Appels <francis.appels@z-application.com>
|
||||
* Copyright (C) 2019 Markus Welters <markus@welters.de>
|
||||
* Copyright (C) 2019 Rafael Ingenleuf <ingenleuf@welters.de>
|
||||
|
|
@ -676,7 +676,7 @@ class pdf_standard_expensereport extends ModeleExpenseReport
|
|||
$default_font_size = pdf_getPDFFontSize($outputlangs);
|
||||
|
||||
/*
|
||||
// ajout du fondu vert en bas de page à droite
|
||||
// add green fade at bottom right of page
|
||||
$image_fondue = $conf->mycompany->dir_output.'/fondu_vert_.jpg';
|
||||
$pdf->Image($image_fondue,20,107,200,190);
|
||||
|
||||
|
|
|
|||
|
|
@ -1560,7 +1560,7 @@ class pdf_octopus extends ModelePDFFactures
|
|||
|
||||
// Show if Option VAT debit option is on also if transmitter is french
|
||||
// Decret n°2099-1299 2022-10-07
|
||||
// French mention : "Option pour le paiement de la taxe d'après les débits"
|
||||
// French legal mention: "Option pour le paiement de la taxe d'apres les debits"
|
||||
if ($this->emetteur->country_code == 'FR') {
|
||||
if (getDolGlobalInt('TAX_MODE') == 1) {
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
|
|
@ -2747,10 +2747,10 @@ class pdf_octopus extends ModelePDFFactures
|
|||
|
||||
$form = new Form($db);
|
||||
|
||||
$tab_height -= 29; // Réduction de la hauteur global du tableau
|
||||
$tab_height -= 29; // Reduce the overall table height
|
||||
$displayWarranty = $this->displayRetainedWarranty($object);
|
||||
if (!$displayWarranty) {
|
||||
$tab_height -= 19; // Réduction de la hauteur global du tableau
|
||||
$tab_height -= 19; // Reduce the overall table height
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2837,7 +2837,7 @@ class pdf_octopus extends ModelePDFFactures
|
|||
}
|
||||
|
||||
// Output Rect
|
||||
// KEEPTHIS => Affiche les bords extérieurs
|
||||
// KEEPTHIS => Display outer borders
|
||||
$this->printRoundedRectBtp($pdf, $this->marge_gauche, $tab_top, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $tab_height, $this->corner_radius, $hidetop, $hidebottom, 'D'); // Rect prend une longueur en 3eme param et 4eme param
|
||||
|
||||
$pdf->line($this->posx_cumul_anterieur - 1, $tab_top, $this->posx_cumul_anterieur - 1, $tab_top + $tab_height);
|
||||
|
|
@ -2942,7 +2942,7 @@ class pdf_octopus extends ModelePDFFactures
|
|||
$pdf->SetXY($x, $tab_top + 8);
|
||||
$pdf->MultiCell(32, 2, price($this->TDataSituation[$col]['HT'], 0, '', 1, -1, 2), '', 'R');
|
||||
|
||||
// Travaux supplémentaires
|
||||
// Additional work
|
||||
$pdf->SetXY($x, $tab_top + 12);
|
||||
$pdf->MultiCell(32, 2, price($this->TDataSituation[$col]['travaux_sup'], 0, '', 1, -1, 2), '', 'R');
|
||||
|
||||
|
|
@ -3042,7 +3042,7 @@ class pdf_octopus extends ModelePDFFactures
|
|||
|
||||
$retenue_garantie = 0;
|
||||
$retenue_garantie_anterieure = 0;
|
||||
// Init tous les champs à 0
|
||||
// Initialize all fields to 0
|
||||
$TDataSituation['cumul_anterieur'] = array(
|
||||
'HT' => 0, //montant HT normal
|
||||
'TVA' => 0, //montant de la TVA sur le HTnet
|
||||
|
|
@ -3063,7 +3063,7 @@ class pdf_octopus extends ModelePDFFactures
|
|||
|
||||
// Read each line to
|
||||
// 1. recalculer le total_ht pour chaque taux de TVA
|
||||
// 2. recalculer la TVA associée à ce montant HT
|
||||
// 2. recalculate the VAT associated with this net amount
|
||||
// 3. If applicable, store this information as "travaux_sup" (additional work) if this line is not linked to a line from the previous situation.
|
||||
foreach ($previousInvoice->lines as $k => $l) {
|
||||
$total_ht = (float) $l->total_ht;
|
||||
|
|
@ -3135,7 +3135,7 @@ class pdf_octopus extends ModelePDFFactures
|
|||
}
|
||||
}
|
||||
|
||||
//Le nouveau cumul = cumul antérieur + current
|
||||
// New cumulative = previous cumulative + current
|
||||
$TDataSituation['nouveau_cumul'] = $this->sumSituation($TDataSituation['current'], $TDataSituation['cumul_anterieur']);
|
||||
|
||||
return $TDataSituation;
|
||||
|
|
@ -3549,7 +3549,7 @@ class pdf_octopus extends ModelePDFFactures
|
|||
|
||||
$ref = $outputlangs->transnoentities("InvoiceSituation").$outputlangs->convToOutputCharset(" n°".$invoice->situation_counter);
|
||||
|
||||
// TODO Discuss whether to declare a final invoice as a DGD (definitive general statement like 'décompte général définitif') or not.
|
||||
// TODO Discuss whether to declare a final invoice as a DGD (definitive general statement, "decompte general definitif") or not.
|
||||
if (getDolGlobalInt('INVOICE_SITUATION_USE_DGD')) {
|
||||
if ($invoice->situation_final) {
|
||||
$ref .= ' - DGD';
|
||||
|
|
|
|||
|
|
@ -1573,7 +1573,7 @@ class pdf_sponge extends ModelePDFFactures
|
|||
|
||||
// Show if Option VAT debit option is on also if transmitter is french
|
||||
// Decret n°2099-1299 2022-10-07
|
||||
// French mention : "Option pour le paiement de la taxe d'après les débits"
|
||||
// French legal mention: "Option pour le paiement de la taxe d'apres les debits"
|
||||
if ($this->emetteur->country_code == 'FR') {
|
||||
if (getDolGlobalInt('TAX_MODE') == 1) {
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Copyright (C) 2005-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2009 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>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -40,7 +40,7 @@ class mailing_pomme extends MailingTargets
|
|||
/**
|
||||
* @var string This label is used if no translation is found for key XXX neither MailingModuleDescXXX where XXX=name is found
|
||||
*/
|
||||
public $desc = 'Dolibarr users with emails'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée
|
||||
public $desc = 'Dolibarr users with emails'; // Label used if no translation found for MailingModuleDescXXX or XXX=name
|
||||
|
||||
/**
|
||||
* @var string[] Module mailing actif si modules require_module actifs
|
||||
|
|
@ -122,9 +122,9 @@ class mailing_pomme extends MailingTargets
|
|||
|
||||
|
||||
/**
|
||||
* Affiche formulaire de filtre qui apparait dans page de selection des destinataires de mailings
|
||||
* Display filter form shown on the mailing recipient selection page
|
||||
*
|
||||
* @return string Retourne zone select
|
||||
* @return string HTML select zone
|
||||
*/
|
||||
public function formFilter()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2005-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025-2026 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
|
||||
|
|
@ -34,7 +34,7 @@ class mailing_xinputfile extends MailingTargets
|
|||
{
|
||||
public $name = 'EmailsFromFile'; // Identifiant du module mailing
|
||||
// This label is used if no translation is found for key XXX neither MailingModuleDescXXX where XXX=name is found
|
||||
public $desc = 'EMails from a file'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée
|
||||
public $desc = 'EMails from a file'; // Label used if no translation found for MailingModuleDescXXX or XXX=name
|
||||
|
||||
/**
|
||||
* @var string[] This module allows to select by categories must be also enabled if category module is not activated
|
||||
|
|
@ -111,9 +111,9 @@ class mailing_xinputfile extends MailingTargets
|
|||
|
||||
|
||||
/**
|
||||
* Affiche formulaire de filtre qui apparait dans page de selection des destinataires de mailings
|
||||
* Display filter form shown on the mailing recipient selection page
|
||||
*
|
||||
* @return string Retourne zone select
|
||||
* @return string HTML select zone
|
||||
*/
|
||||
public function formFilter()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2005-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025-2026 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
|
||||
|
|
@ -34,7 +34,7 @@ class mailing_xinputuser extends MailingTargets
|
|||
{
|
||||
public $name = 'EmailsFromUser'; // Identifiant du module mailing
|
||||
// This label is used if no translation is found for key XXX neither MailingModuleDescXXX where XXX=name is found
|
||||
public $desc = 'EMails input by user'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée
|
||||
public $desc = 'EMails input by user'; // Label used if no translation found for MailingModuleDescXXX or XXX=name
|
||||
|
||||
/**
|
||||
* @var string[] This module allows to select by categories must be also enabled if category module is not activated
|
||||
|
|
@ -109,9 +109,9 @@ class mailing_xinputuser extends MailingTargets
|
|||
|
||||
|
||||
/**
|
||||
* Affiche formulaire de filtre qui apparait dans page de selection des destinataires de mailings
|
||||
* Display filter form shown on the mailing recipient selection page
|
||||
*
|
||||
* @return string Retourne zone select
|
||||
* @return string HTML select zone
|
||||
*/
|
||||
public function formFilter()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/* Copyright (C) 2025 Christophe Battarel <christophe@altairis.fr>
|
||||
* Copyright (C) 2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025-2026 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
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
/**
|
||||
* \file htdocs/core/modules/member/mod_member_custom.php
|
||||
* \ingroup member
|
||||
* \brief Fichier contenant la class du modele de numerotation d'ahérent Custom
|
||||
* \brief File containing the class for the Custom member numbering model
|
||||
*/
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/modules/member/modules_member.class.php';
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* Copyright (C) 2013-2014 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2026 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
|
||||
|
|
@ -202,7 +203,7 @@ class modResource extends DolibarrModules
|
|||
$r++;
|
||||
|
||||
$this->menu[$r++] = array(
|
||||
'fk_menu' => 'fk_mainmenu=agenda,fk_leftmenu=resource', //On utilise les ancres définis dans le menu parent déclaré au dessus
|
||||
'fk_menu' => 'fk_mainmenu=agenda,fk_leftmenu=resource', // Uses anchors defined in the parent menu declared above
|
||||
'type' => 'left', // Toujours un menu gauche
|
||||
'titre' => 'MenuResourceAdd',
|
||||
'mainmenu' => 'agenda',
|
||||
|
|
@ -217,7 +218,7 @@ class modResource extends DolibarrModules
|
|||
);
|
||||
|
||||
$this->menu[$r++] = array(
|
||||
'fk_menu' => 'fk_mainmenu=agenda,fk_leftmenu=resource', //On utilise les ancres définis dans le menu parent déclaré au dessus
|
||||
'fk_menu' => 'fk_mainmenu=agenda,fk_leftmenu=resource', // Uses anchors defined in the parent menu declared above
|
||||
'type' => 'left', // Toujours un menu gauche
|
||||
'titre' => 'List',
|
||||
'mainmenu' => 'agenda',
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -93,7 +93,7 @@ abstract class ModeleProductCode extends CommonNumRefGenerator
|
|||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
* Renvoi la liste des modeles de numérotation
|
||||
* Return the list of numbering models
|
||||
*
|
||||
* @param DoliDB $dbs Database handler
|
||||
* @param int $maxfilenamelength Max length of value to show
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2005-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2018-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Nick Fragoulis
|
||||
|
|
@ -611,7 +611,7 @@ class pdf_eagle extends ModelePDFStockTransfer
|
|||
|
||||
$pdf->SetFont('', '', $default_font_size - 1); // We reposition the default font
|
||||
|
||||
// Lot / série
|
||||
// Batch / serial number
|
||||
if (isModEnabled('productbatch')) {
|
||||
$pdf->SetXY($this->posxlot, $curY);
|
||||
$pdf->MultiCell(($this->posxweightvol - $this->posxlot), 3, $object->lines[$i]->batch, '', 'C');
|
||||
|
|
@ -1075,7 +1075,7 @@ class pdf_eagle extends ModelePDFStockTransfer
|
|||
|
||||
$pdf->SetFont('', '', $default_font_size + 1);
|
||||
|
||||
// Date prévue depart
|
||||
// Expected departure date
|
||||
if (!empty($object->date_prevue_depart)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
|
|
@ -1083,7 +1083,7 @@ class pdf_eagle extends ModelePDFStockTransfer
|
|||
$pdf->MultiCell($w, 4, $outputlangs->transnoentities("DatePrevueDepart")." : ".dol_print_date($object->date_prevue_depart, "day", false, $outputlangs, true), '', 'R');
|
||||
}
|
||||
|
||||
// Date prévue arrivée
|
||||
// Expected arrival date
|
||||
if (!empty($object->date_prevue_arrivee)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
|
|
@ -1099,7 +1099,7 @@ class pdf_eagle extends ModelePDFStockTransfer
|
|||
$pdf->MultiCell($w, 4, $outputlangs->transnoentities("DateReelleDepart")." : ".dol_print_date($object->date_reelle_depart, "day", false, $outputlangs, true), '', 'R');
|
||||
}
|
||||
|
||||
// Date reelle arrivée
|
||||
// Actual arrival date
|
||||
if (!empty($object->date_reelle_arrivee)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
|
||||
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2018-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024 Nick Fragoulis
|
||||
|
|
@ -1264,7 +1264,7 @@ class pdf_eagle_proforma extends ModelePDFStockTransfer
|
|||
|
||||
$pdf->SetFont('', '', $default_font_size + 1);
|
||||
|
||||
// Date prévue depart
|
||||
// Expected departure date
|
||||
if (!empty($object->date_prevue_depart)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
|
|
@ -1272,7 +1272,7 @@ class pdf_eagle_proforma extends ModelePDFStockTransfer
|
|||
$pdf->MultiCell($w, 4, $outputlangs->transnoentities("DatePrevueDepart")." : ".dol_print_date($object->date_prevue_depart, "day", false, $outputlangs, true), '', 'R');
|
||||
}
|
||||
|
||||
// Date prévue arrivée
|
||||
// Expected arrival date
|
||||
if (!empty($object->date_prevue_arrivee)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
|
|
@ -1288,7 +1288,7 @@ class pdf_eagle_proforma extends ModelePDFStockTransfer
|
|||
$pdf->MultiCell($w, 4, $outputlangs->transnoentities("DateReelleDepart")." : ".dol_print_date($object->date_reelle_depart, "day", false, $outputlangs, true), '', 'R');
|
||||
}
|
||||
|
||||
// Date reelle arrivée
|
||||
// Actual arrival date
|
||||
if (!empty($object->date_reelle_arrivee)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2014 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
* Copyright (C) 2015-2016 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2018-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2022 OpenDSI <support@open-dsi.fr>
|
||||
|
|
@ -1376,7 +1376,7 @@ if (!empty($object->thirdparty)) {
|
|||
"invoice_supplier_rec"
|
||||
];
|
||||
|
||||
// seller.tva_assuj -> à injecter dans jsConf ou ailleurs
|
||||
// seller.tva_assuj -> to inject into jsConf or elsewhere
|
||||
if (supplierElements.includes(jsConf.docObject.element) && !jsConf.docObject.seller_tva_assuj) {
|
||||
if (tva_tx !== 0) {
|
||||
tva_tx = 0;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2018-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024 William Mead <william.mead@manchenumerique.fr>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2025 Quentin VIAL--GOUTEYRON <quentin.vial-gouteyron@atm-consulting.fr>
|
||||
|
|
@ -241,7 +241,7 @@ class DataPolicyCron
|
|||
'sql_template' => $sqltemplate,
|
||||
'class' => 'Adherent',
|
||||
'file' => DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php',
|
||||
'anonymize_fields' => array('lastname' => 'MAKEANONYMOUS', 'firstname' => 'MAKEANONYMOUS', 'societe' => '---', 'address' => '---', 'town' => '---', 'zip' => '---', 'phone' => '---', 'phone_perso' => '---', 'phone_mobile' => '---', 'email' => 'anonymous+__ID__@example.com', 'birth' => dol_mktime(0, 0, 0, 1, 1, 1900), 'photo' => '', 'url' => '---', 'fax' => '---', 'socialnetworks' => [], 'ip' => '0.0.0.0', 'note_private' => '---', 'note_public' => '---', 'statut' => 0), // Force status to "canceled / résilié"
|
||||
'anonymize_fields' => array('lastname' => 'MAKEANONYMOUS', 'firstname' => 'MAKEANONYMOUS', 'societe' => '---', 'address' => '---', 'town' => '---', 'zip' => '---', 'phone' => '---', 'phone_perso' => '---', 'phone_mobile' => '---', 'email' => 'anonymous+__ID__@example.com', 'birth' => dol_mktime(0, 0, 0, 1, 1, 1900), 'photo' => '', 'url' => '---', 'fax' => '---', 'socialnetworks' => [], 'ip' => '0.0.0.0', 'note_private' => '---', 'note_public' => '---', 'statut' => 0), // Force status to "canceled"
|
||||
'call_params' => array(
|
||||
'delete' => array('user'), // $object->delete($user)
|
||||
'update' => array('user') // $object->update($user)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
/* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
/* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
|
|
@ -149,9 +149,9 @@ function getAttachments($jk, $mbox)
|
|||
/**
|
||||
* Get content of a joined file from its position into a given email
|
||||
*
|
||||
* @param integer $jk numéro du mail
|
||||
* @param string $fpos position de la pièce jointe
|
||||
* @param integer $type type de la pièce jointe
|
||||
* @param integer $jk mail number
|
||||
* @param string $fpos attachment position
|
||||
* @param integer $type attachment type
|
||||
* @param \IMAP\Connection $mbox object connection imap
|
||||
* @return string data
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
* Copyright (C) 2014 Cedric Gross <c.gross@kreiz-it.fr>
|
||||
* Copyright (C) 2016 Florian Henry <florian.henry@atm-consulting.fr>
|
||||
* Copyright (C) 2017-2022 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2018-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2019-2020 Christophe Battarel <christophe@altairis.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
|
|
@ -1702,7 +1702,7 @@ if ($object->id > 0 || !empty($object->ref)) {
|
|||
print $formother->getHTMLScannerForm("barcodescannerjs", 'all', 1);
|
||||
}
|
||||
|
||||
// traitement entrepot par défaut
|
||||
// default warehouse handling
|
||||
print '<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$("select[name=fk_default_warehouse]").change(function() {
|
||||
|
|
|
|||
|
|
@ -2698,7 +2698,7 @@ if ($action == 'create') {
|
|||
print '</td>';
|
||||
|
||||
print '</tr>';
|
||||
} // Fin si c'est payé/validé
|
||||
} // End if paid/validated
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
|
@ -2739,7 +2739,7 @@ if ($action == 'create') {
|
|||
path += "&vatrate="+tva;
|
||||
path += "&qty="+qty;
|
||||
|
||||
if (type_fee == 4) { // frais_kilométriques
|
||||
if (type_fee == 4) { // mileage expenses
|
||||
if (tax_cat == "" || parseInt(tax_cat) <= 0){
|
||||
return ;
|
||||
}
|
||||
|
|
@ -2820,9 +2820,9 @@ if ($action != 'create' && $action != 'edit' && $action != 'editline') {
|
|||
}
|
||||
|
||||
/* If status is "Draft"
|
||||
* ET user à droit "creer/supprimer"
|
||||
* ET fk_user_author == user courant
|
||||
* Afficher : "Enregistrer" / "Modifier" / "Supprimer"
|
||||
* AND user has "create/delete" right
|
||||
* AND fk_user_author == current user
|
||||
* Show: "Save" / "Modify" / "Delete"
|
||||
*/
|
||||
if ($user->hasRight('expensereport', 'creer') && $object->status == ExpenseReport::STATUS_DRAFT) {
|
||||
if (in_array($object->fk_user_author, $childids) || $user->hasRight('expensereport', 'writeall_advance')) {
|
||||
|
|
@ -2836,10 +2836,10 @@ if ($action != 'create' && $action != 'edit' && $action != 'editline') {
|
|||
}
|
||||
}
|
||||
|
||||
/* If status if "Refused"
|
||||
* ET user à droit "creer/supprimer"
|
||||
* ET fk_user_author == user courant
|
||||
* Afficher : "Enregistrer" / "Modifier" / "Supprimer"
|
||||
/* If status is "Refused"
|
||||
* AND user has "create/delete" right
|
||||
* AND fk_user_author == current user
|
||||
* Show: "Save" / "Modify" / "Delete"
|
||||
*/
|
||||
if ($user->hasRight('expensereport', 'creer') && $object->status == ExpenseReport::STATUS_REFUSED) {
|
||||
if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid) {
|
||||
|
|
@ -2857,10 +2857,10 @@ if ($action != 'create' && $action != 'edit' && $action != 'editline') {
|
|||
}
|
||||
}
|
||||
|
||||
/* Si l'état est "En attente d'approbation"
|
||||
* ET user à droit de "approve"
|
||||
* ET fk_user_validator == user courant
|
||||
* Afficher : "Valider" / "Refuser" / "Supprimer"
|
||||
/* If status is "Pending approval"
|
||||
* AND user has "approve" right
|
||||
* AND fk_user_validator == current user
|
||||
* Show: "Validate" / "Refuse" / "Delete"
|
||||
*/
|
||||
if ($object->status == ExpenseReport::STATUS_VALIDATED) {
|
||||
if (in_array($object->fk_user_author, $childids)) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
* Copyright (c) 2018-2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2016-2020 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025 William Mead <william@m34d.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -1467,7 +1467,7 @@ class ExpenseReport extends CommonObject
|
|||
public function set_save_from_refuse($fuser)
|
||||
{
|
||||
// phpcs:enable
|
||||
// Sélection de la date de début de la NDF
|
||||
// Select the start date of the expense report
|
||||
$sql = 'SELECT date_debut';
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element;
|
||||
$sql .= " WHERE rowid = ".((int) $this->id);
|
||||
|
|
@ -2107,7 +2107,7 @@ class ExpenseReport extends CommonObject
|
|||
$this->error = 'ExpenseReportConstraintViolationError';
|
||||
$this->errors[] = $this->error;
|
||||
|
||||
$new_current_total_ttc -= $amount_to_test - $rule->amount; // ex, entered 16€, limit 12€, subtracts 4€;
|
||||
$new_current_total_ttc -= $amount_to_test - $rule->amount; // ex: entered 16 EUR, limit 12 EUR, subtracts 4 EUR
|
||||
$rule_warning_message_tab[] = $langs->trans('ExpenseReportConstraintViolationError', $rule->id, price($amount_to_test, 0, $langs, 1, -1, -1, $conf->currency), price($rule->amount, 0, $langs, 1, -1, -1, $conf->currency));
|
||||
} else {
|
||||
$this->error = 'ExpenseReportConstraintViolationWarning';
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ if ($action == 'add' && $permissiontoadd) {
|
|||
$error++;
|
||||
}
|
||||
|
||||
// gestion des fréquences et des échéances
|
||||
// frequency and due date management
|
||||
$frequency = GETPOSTINT('frequency');
|
||||
$rec_year = GETPOST('rec_year');
|
||||
$rec_month = GETPOST('rec_month');
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2016-2018 Charlie Benke <charlie@patas-monkey.com>
|
||||
* Copyright (C) 2024 William Mead <william.mead@manchenumerique.fr>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -129,7 +129,7 @@ class FichinterRec extends Fichinter
|
|||
{
|
||||
$this->db = $db;
|
||||
|
||||
//status dans l'ordre de l'intervention
|
||||
// status in intervention order
|
||||
$this->labelStatus[0] = 'Draft';
|
||||
$this->labelStatus[1] = 'Closed';
|
||||
|
||||
|
|
@ -875,7 +875,7 @@ class FichinterRec extends Fichinter
|
|||
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
|
||||
$sql .= ' SET nb_gen_done = nb_gen_done + 1';
|
||||
$sql .= ' , date_last_gen = now()';
|
||||
// si on et arrivé à la fin des génération
|
||||
// if we have reached the end of the generation cycle
|
||||
if ($this->nb_gen_max <= $this->nb_gen_done + 1) {
|
||||
$sql .= ' , status = 1';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1096,7 +1096,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
|
|||
</script>'."\n";
|
||||
|
||||
|
||||
// Formulaire de demande
|
||||
// Leave request form
|
||||
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'" name="demandeCP">'."\n";
|
||||
print '<input type="hidden" name="token" value="'.newToken().'" />'."\n";
|
||||
print '<input type="hidden" name="action" value="add" />'."\n";
|
||||
|
|
@ -1589,18 +1589,18 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
|
|||
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("TitleToValidCP"), $langs->trans("ConfirmToValidCP"), "confirm_send", '', 1, 1);
|
||||
}
|
||||
|
||||
// Si validation de la demande
|
||||
// If validating the request
|
||||
if ($action == 'valid') {
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("TitleValidCP"), $langs->trans("ConfirmValidCP"), "confirm_valid", '', 1, 1);
|
||||
}
|
||||
|
||||
// Si refus de la demande
|
||||
// If refusing the request
|
||||
if ($action == 'refuse') {
|
||||
$array_input = array(array('type' => "text", 'label' => $langs->trans('DetailRefusCP'), 'name' => "detail_refuse", 'size' => "50", 'value' => ""));
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id."&action=confirm_refuse", $langs->trans("TitleRefuseCP"), $langs->trans('ConfirmRefuseCP'), "confirm_refuse", $array_input, 1, 0);
|
||||
}
|
||||
|
||||
// Si annulation de la demande
|
||||
// If cancelling the request
|
||||
if ($action == 'cancel') {
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("TitleCancelCP"), $langs->trans("ConfirmCancelCP"), "confirm_cancel", '', 1, 1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -286,7 +286,7 @@ if (empty($reshook)) {
|
|||
}
|
||||
}
|
||||
foreach ($TusersToProcess as $u) {
|
||||
// Check if there is already holiday for this period pour chaque user
|
||||
// Check if there is already holiday for this period for each user
|
||||
$verifCP = $object->verifDateHolidayCP($u, $date_debut, $date_fin, $halfday);
|
||||
if (!$verifCP) {
|
||||
//setEventMessages($langs->trans("alreadyCPexist"), null, 'errors');
|
||||
|
|
@ -483,7 +483,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
|
|||
</script>'."\n";
|
||||
|
||||
|
||||
// Formulaire de demande
|
||||
// Leave request form
|
||||
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'" name="demandeCP">'."\n";
|
||||
print '<input type="hidden" name="token" value="'.newToken().'" />'."\n";
|
||||
print '<input type="hidden" name="action" value="add" />'."\n";
|
||||
|
|
@ -570,7 +570,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
|
|||
print $form->textwithpicto($langs->trans("DateDebCP"), $langs->trans("FirstDayOfHoliday"));
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
// Si la demande ne vient pas de l'agenda
|
||||
// If the request does not come from the agenda
|
||||
if (!GETPOST('date_debut_')) {
|
||||
print $form->selectDate(-1, 'date_debut_', 0, 0, 0, '', 1, 1);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -294,7 +294,7 @@ class Holiday extends CommonObject
|
|||
}
|
||||
|
||||
/**
|
||||
* Créer un congés payés dans la base de données
|
||||
* Create a paid leave entry in the database
|
||||
*
|
||||
* @param User $user User that create
|
||||
* @param int $notrigger 0=launch triggers after, 1=disable triggers
|
||||
|
|
@ -544,7 +544,7 @@ class Holiday extends CommonObject
|
|||
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."holiday as cp, ".MAIN_DB_PREFIX."user as uu, ".MAIN_DB_PREFIX."user as ua";
|
||||
$sql .= " WHERE cp.entity IN (".getEntity('holiday').")";
|
||||
$sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid"; // Hack pour la recherche sur le tableau
|
||||
$sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid"; // Hack needed for search on the list
|
||||
$sql .= " AND cp.fk_user IN (".$this->db->sanitize($user_id).")";
|
||||
|
||||
// Selection filter
|
||||
|
|
@ -675,7 +675,7 @@ class Holiday extends CommonObject
|
|||
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."holiday as cp, ".MAIN_DB_PREFIX."user as uu, ".MAIN_DB_PREFIX."user as ua";
|
||||
$sql .= " WHERE cp.entity IN (".getEntity('holiday').")";
|
||||
$sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack pour la recherche sur le tableau
|
||||
$sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack needed for search on the list
|
||||
|
||||
// Selection filtering
|
||||
if (!empty($filter)) {
|
||||
|
|
@ -1600,7 +1600,7 @@ class Holiday extends CommonObject
|
|||
}
|
||||
|
||||
/**
|
||||
* Met à jour une option du module Holiday Payés
|
||||
* Update an option of the Holiday module
|
||||
*
|
||||
* @param string $name name settings parameter
|
||||
* @param string $value true if update OK else false
|
||||
|
|
@ -2291,7 +2291,7 @@ class Holiday extends CommonObject
|
|||
*
|
||||
* @param string $sqlorder SQL sort order
|
||||
* @param string $sqlwhere SQL where
|
||||
* @return int -1 si erreur, 1 si OK et 2 si pas de résultat
|
||||
* @return int -1 if error, 1 if OK, 2 if no result
|
||||
*/
|
||||
public function fetchLog($sqlorder, $sqlwhere)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ if ($id > 0) {
|
|||
$search_employee = $user_id;
|
||||
}
|
||||
|
||||
// Récupération des congés payés de l'utilisateur ou de tous les users de sa hierarchy
|
||||
// Retrieve paid leave for the current user or for all users in their hierarchy
|
||||
// Load array $object->holiday
|
||||
|
||||
$sql = "SELECT";
|
||||
|
|
@ -328,7 +328,7 @@ if (isset($extrafields->attributes[$object->table_element]['label']) && is_array
|
|||
}
|
||||
$sql .= ", ".MAIN_DB_PREFIX."user as uu, ".MAIN_DB_PREFIX."user as ua";
|
||||
$sql .= " WHERE cp.entity IN (".getEntity('holiday').")";
|
||||
$sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack pour la recherche sur le tableau
|
||||
$sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack needed for search on the list
|
||||
// Search all
|
||||
if (!empty($search_all)) {
|
||||
$sql .= natural_search(array_keys($fieldstosearchall), $search_all);
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2021 Greg Rastklan <greg.rastklan@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Jean-Pascal BOUDET <jean-pascal.boudet@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Grégory BLEMAND <gregory.blemand@atm-consulting.fr>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -1114,11 +1114,11 @@ class Skill extends CommonObject
|
|||
$result = '';
|
||||
switch ($code) {
|
||||
case 0: $result = $langs->trans("TypeKnowHow");
|
||||
break; //"Savoir Faire"
|
||||
break; // "Know-how"
|
||||
case 1: $result = $langs->trans("TypeHowToBe");
|
||||
break; // "Savoir être"
|
||||
break; // "Soft skills"
|
||||
case 9: $result = $langs->trans("TypeKnowledge");
|
||||
break; //"Savoir"
|
||||
break; // "Knowledge"
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
|
@ -1126,9 +1126,9 @@ class Skill extends CommonObject
|
|||
/**
|
||||
* Return clickable link of object (with eventually picto)
|
||||
*
|
||||
* @param string $option Where point the link (0=> main card, 1,2 => shipment, 'nolink'=>No link)
|
||||
* @param ?array<string,mixed> $arraydata Array of data
|
||||
* @return string HTML Code for Kanban thumb.
|
||||
* @param string $option Where point the link (0=> main card, 1,2 => shipment, 'nolink'=>No link)
|
||||
* @param ?array<string,mixed> $arraydata Array of data
|
||||
* @return string HTML Code for Kanban thumb.
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -483,7 +483,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||
include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php';
|
||||
}
|
||||
|
||||
$conf->modules_parts['tpl']['hrm'] = '/hrm/core/tpl/'; // Pour utilisation du tpl hrm sur cet écran
|
||||
$conf->modules_parts['tpl']['hrm'] = '/hrm/core/tpl/'; // To use the hrm tpl on this screen
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
* Copyright (C) 2021 Jean-Pascal BOUDET <jean-pascal.boudet@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Grégory BLEMAND <gregory.blemand@atm-consulting.fr>
|
||||
* Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2026 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
|
||||
|
|
@ -112,7 +113,7 @@ function displayRankInfos($selected_rank, $fk_skill, $inputname = 'TNote', $mode
|
|||
require_once DOL_DOCUMENT_ROOT . '/hrm/class/skill.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/hrm/class/skilldet.class.php';
|
||||
|
||||
// On charge les différentes notes possibles pour la compétence $fk_skill
|
||||
// Load the different possible ratings for skill $fk_skill
|
||||
$skilldet = new Skilldet($db);
|
||||
$Lines = $skilldet->fetchAll('ASC', 'rankorder', 0, 0, '(fk_skill:=:'.((int) $fk_skill).')');
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2021 Greg Rastklan <greg.rastklan@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Jean-Pascal BOUDET <jean-pascal.boudet@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Grégory BLEMAND <gregory.blemand@atm-consulting.fr>
|
||||
* Copyright (C) 2023-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2023-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -274,7 +274,7 @@ if ($action == 'create') {
|
|||
|
||||
|
||||
// SKILLDET ADD
|
||||
//@todo je stop ici ... à continuer (affichage des 5 skilled input pour create action
|
||||
//@todo stopped here ... to be continued (display of the 5 skill input fields for create action
|
||||
//print $object->showInputField($val, $key, $value, '', '['']', '', 0);
|
||||
|
||||
print '</table>' . "\n";
|
||||
|
|
@ -782,7 +782,7 @@ if ($action != "create" && $action != "edit") {
|
|||
print $objectline->getLibStatut(5);
|
||||
} elseif ($key == 'rowid') {
|
||||
print $objectline->showOutputField($val, $key, (string) $objectline->id, '');
|
||||
// ajout pencil
|
||||
// add pencil icon
|
||||
print '<a class="timeline-btn" href="' . DOL_MAIN_URL_ROOT . '/comm/action/skilldet_card.php?action=edit&id=' . $objectline->id . '"><i class="fa fa-pencil" title="' . $langs->trans("Modify") . '" ></i></a>';
|
||||
} else {
|
||||
print $objectline->showOutputField($val, $key, $objectline->$key, '');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2021 Greg Rastklan <greg.rastklan@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Jean-Pascal BOUDET <jean-pascal.boudet@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Grégory BLEMAND <gregory.blemand@atm-consulting.fr>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
|
|
@ -606,7 +606,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||
}
|
||||
|
||||
|
||||
// liste des evaluation liées
|
||||
// list of linked evaluations
|
||||
if ($objecttype == 'user' && $permissiontoadd) {
|
||||
$evaltmp = new Evaluation($db);
|
||||
$job = new Job($db);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* Copyright (C) 2018-2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2023 Alexandre Janniaux <alexandre.janniaux@gmail.com>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -279,7 +279,7 @@ function getLicenceHeader($user, $langs, $now)
|
|||
*/
|
||||
|
||||
/**
|
||||
* Post-generation validation — logs and displays a warning if residual myobject/mymodule tokens remain.
|
||||
* Post-generation validation -- logs and displays a warning if residual myobject/mymodule tokens remain.
|
||||
*
|
||||
* @param string $destfile Path to the generated file
|
||||
* @param NamingContract $nc Contract used for generation
|
||||
|
|
@ -439,7 +439,7 @@ if ($dirins && $action == 'initmodule' && $modulename) { // Test on permission
|
|||
'$this->picto = \'generic\';' => (empty($picto)) ? '$this->picto = \'generic\'' : '$this->picto = \'' . $picto . '\';',
|
||||
'modulefamily' => $family,
|
||||
// Key '500000' would be cast to int(500000) by PHP, then renumbered to 0 by
|
||||
// array_merge — causing str_replace to search for '0' instead of '500000'.
|
||||
// array_merge -- causing str_replace to search for '0' instead of '500000'.
|
||||
// Use a string key that matches the exact assignment line to avoid this.
|
||||
'$this->numero = 500000' => '$this->numero = '.$idmodule,
|
||||
]
|
||||
|
|
@ -6236,7 +6236,7 @@ if ($module == 'initmodule') {
|
|||
value1 = $("#crud").val();
|
||||
value2 = $("#permissionObj").val();
|
||||
|
||||
// Vérifie si les deux sélections sont faites
|
||||
// Check if both selections are made
|
||||
if (value1 && value2) {
|
||||
switch(value1.toLowerCase()){
|
||||
case "read":
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2023 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) ---Replace with your own copyright and developer email---
|
||||
* Copyright (C) 2026 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
|
||||
|
|
@ -352,7 +353,7 @@ class ActionsMyModule extends CommonHookActions
|
|||
$counter = count($parameters['head']);
|
||||
$element = $parameters['object']->element;
|
||||
$id = $parameters['object']->id;
|
||||
// verifier le type d'onglet comme member_stats où ça ne doit pas apparaitre
|
||||
// check the tab type like member_stats where it should not appear
|
||||
// if (in_array($element, ['societe', 'member', 'contrat', 'fichinter', 'project', 'propal', 'commande', 'facture', 'order_supplier', 'invoice_supplier'])) {
|
||||
if (in_array($element, ['context1', 'context2'])) {
|
||||
$datacount = 0;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
<?php
|
||||
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2026 Jon Bendtsen <jon.bendtsen.github@jonb.dk>
|
||||
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2026 Jon Bendtsen <jon.bendtsen.github@jonb.dk>
|
||||
*
|
||||
* 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
|
||||
|
|
@ -447,12 +447,14 @@ if ($id > 0 || !empty($ref)) {
|
|||
print '</div>';
|
||||
|
||||
$i = 0;
|
||||
$colspan = 3;
|
||||
print '<div class="div-table-responsive">';
|
||||
print '<table class="tagtable liste listwithfilterbefore" width="100%">';
|
||||
print '<table class="tagtable liste listwithfilterbefore centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
// Action column
|
||||
if ($conf->main_checkbox_left_column) {
|
||||
print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch ');
|
||||
$colspan++;
|
||||
}
|
||||
print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "s.rowid", "", $option, '', $sortfield, $sortorder);
|
||||
print_liste_field_titre("Company", $_SERVER["PHP_SELF"], "s.nom", "", $option, '', $sortfield, $sortorder);
|
||||
|
|
@ -547,7 +549,7 @@ if ($id > 0 || !empty($ref)) {
|
|||
} else {
|
||||
print '<td>'.$form->textwithpicto($langs->trans("Total"), $langs->trans("Totalforthispage")).'</td>';
|
||||
}
|
||||
print '<td colspan="3"></td>';
|
||||
print '<td colspan="'.$colspan.'"></td>';
|
||||
print '<td class="center">'.$total_qty.'</td>';
|
||||
print '<td class="right">'.price($total_ht).'</td>';
|
||||
print '<td></td>';
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* Copyright (C) 2014-2020 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2015 Charlie BENKE <charlie@patas-monkey.com>
|
||||
* Copyright (C) 2018-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2018-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2023 Maxime Nicolas <maxime@oarces.com>
|
||||
* Copyright (C) 2023 Benjamin GREMBI <benjamin@oarces.com>
|
||||
|
|
@ -296,7 +296,7 @@ if ($action == 'add' && empty($cancel) && $permissiontoadd) {
|
|||
$paiement->chid = $object->id; // deprecated
|
||||
$paiement->datep = $datep;
|
||||
$paiement->datev = $datev;
|
||||
$paiement->amounts = array($object->id => $amount); // Tableau de montant
|
||||
$paiement->amounts = array($object->id => $amount); // Amount array
|
||||
$paiement->fk_typepayment = $type_payment;
|
||||
$paiement->num_payment = GETPOST("num_payment", 'alphanohtml');
|
||||
$paiement->note_private = GETPOST("note", 'restricthtml');
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Marc Chenebaux <marc.chenebaux@maj44.com>
|
||||
* Copyright (C) 2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025-2026 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
|
||||
|
|
@ -334,7 +334,7 @@ class Salaries extends DolibarrApi
|
|||
*/
|
||||
public function getPayments($pid)
|
||||
{
|
||||
// A payment of salary can be done on different salaires of didderent user, so only users with permission
|
||||
// A payment of salary can be done on different salaries of different users, so only users with permission
|
||||
// to read all area allowed.
|
||||
// TODO To support read or readchild case, the get must be done with a SQL that include the paid user with
|
||||
// a where on current user and childids of current user.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Copyright (C) 2011-2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
|
||||
* Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -255,7 +255,7 @@ class PaymentSalary extends CommonObject
|
|||
$totalamount = (float) price2num($totalamount, 'MT'); // this is to ensure the following test is no biaised by a potential float equal to 0.0000000000001
|
||||
if ($totalamount == 0) {
|
||||
return -1;
|
||||
} // On accepte les montants negatifs pour les rejets de prelevement mais pas null
|
||||
} // Negative amounts are accepted (for direct debit rejections) but not null
|
||||
|
||||
|
||||
$this->db->begin();
|
||||
|
|
@ -799,7 +799,7 @@ class PaymentSalary extends CommonObject
|
|||
public function LibStatut($status, $mode = 0)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $langs; // TODO Renvoyer le libelle anglais et faire traduction a affichage
|
||||
global $langs; // TODO Return the English label and translate at display time
|
||||
|
||||
$langs->load('compta');
|
||||
/*if ($mode == 0)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2016-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2016-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
|
|
@ -116,7 +116,7 @@ if (($action == 'add_payment' || ($action == 'confirm_paiement' && $confirm == '
|
|||
$paiement->fk_salary = $id;
|
||||
$paiement->chid = $id; // deprecated
|
||||
$paiement->datep = $datepaye;
|
||||
$paiement->amounts = $amounts; // Tableau de montant
|
||||
$paiement->amounts = $amounts; // Amount array
|
||||
$paiement->fk_typepayment = GETPOSTINT("paiementtype");
|
||||
$paiement->num_payment = GETPOST("num_payment", 'alphanohtml');
|
||||
$paiement->note = GETPOST("note", 'restricthtml');
|
||||
|
|
@ -164,7 +164,7 @@ llxHeader('', '', $help_url);
|
|||
$salary = $object;
|
||||
$sumpaid = 0.0;
|
||||
|
||||
// Formulaire de creation d'un paiement de charge
|
||||
// Payment creation form
|
||||
if ($action == 'create') {
|
||||
$salary->accountid = $salary->fk_account ? $salary->fk_account : $salary->accountid;
|
||||
$salary->fk_typepayment = $salary->mode_reglement_id ? $salary->mode_reglement_id : $salary->paiementtype;
|
||||
|
|
@ -328,7 +328,7 @@ if ($action == 'create') {
|
|||
|
||||
print '<br>';
|
||||
|
||||
// Bouton Save payment
|
||||
// Save payment button
|
||||
print '<div class="center">';
|
||||
print '<div class="paddingbottom"><input type="checkbox" checked name="closepaidsalary" id="closepaidsalary" class="marginrightonly"><label for="closepaidsalary" class="opacitymedium">'.$langs->trans("ClosePaidSalaryAutomatically").'</label></div>';
|
||||
print $form->buttonsSaveCancel("ToMakePayment", "Cancel", array(), true);
|
||||
|
|
|
|||
|
|
@ -524,6 +524,9 @@ if (empty($reshook)) {
|
|||
$object->country_code = $tmparray['code'];
|
||||
$object->country = $tmparray['label'];
|
||||
}
|
||||
if (empty($object->tva_intra)) {
|
||||
$object->tva_intra = $object->calculateVATNumberFromProperties($object);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5391,15 +5391,22 @@ class Societe extends CommonObject
|
|||
public function calculateVATNumberFromProperties($thirdparty)
|
||||
{
|
||||
if ($thirdparty->country_code == 'FR' && empty($thirdparty->tva_intra) && !empty($thirdparty->tva_assuj)) {
|
||||
$siren = trim($thirdparty->idprof1);
|
||||
if (empty($siren)) {
|
||||
$siren = (int) substr(str_replace(' ', '', $thirdparty->idprof2), 0, 9);
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/profid.lib.php';
|
||||
|
||||
$siren = preg_replace('/\s+/', '', (string) $thirdparty->idprof1);
|
||||
$siret = preg_replace('/\s+/', '', (string) $thirdparty->idprof2);
|
||||
if (!isValidSiren($siren)) {
|
||||
if (!isValidSiret($siret)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$siren = substr($siret, 0, 9);
|
||||
}
|
||||
if (!empty($siren)) {
|
||||
// [FR + key code + SIREN number ]
|
||||
// Key VAT = [12 + 3 * (SIREN modulo 97)] modulo 97
|
||||
$cle = (12 + 3 * $siren % 97) % 97;
|
||||
$tva_intra = 'FR' . $cle . $siren;
|
||||
$cle = (12 + 3 * (((int) $siren) % 97)) % 97;
|
||||
$tva_intra = 'FR' . str_pad((string) $cle, 2, '0', STR_PAD_LEFT) . $siren;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* Copyright (C) 2013-2018 Jean-François Ferry <hello@librethic.io>
|
||||
* Copyright (C) 2016 Christophe Battarel <christophe@altairis.fr>
|
||||
* Copyright (C) 2019-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2019-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2020 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2023-2025 Charlene Benke <charlene@patas-monkey.com>
|
||||
* Copyright (C) 2023-2024 Benjamin Falière <benjamin.faliere@altairis.fr>
|
||||
|
|
@ -1460,7 +1460,7 @@ class Ticket extends CommonObject
|
|||
}
|
||||
|
||||
/**
|
||||
* Charge dans cache la liste des sévérité de tickets (paramétrable dans dictionnaire)
|
||||
* Load into cache the list of ticket severities (configurable in the dictionary)
|
||||
*
|
||||
* @return int Number of lines loaded, 0 if already loaded, <0 if KO
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* Copyright (C) 2011 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2016 Christophe Battarel <christophe@altairis.fr>
|
||||
* Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -118,7 +118,7 @@ if ($action == 'addcontact' && $user->hasRight('ticket', 'write')) {
|
|||
$internal_contacts = $object->listeContact(-1, 'internal', 0, 'SUPPORTTEC');
|
||||
foreach ($internal_contacts as $key => $contact) {
|
||||
if ($contact['id'] !== $contactid) {
|
||||
//print "user à effacer : ".$useroriginassign;
|
||||
//print "user to delete: ".$useroriginassign;
|
||||
$result = $object->delete_contact($contact['rowid']);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2005-2015 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2010 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
|
||||
* Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -69,7 +69,7 @@ if (getDolGlobalString('MAIN_USE_ADVANCED_PERMS')) {
|
|||
}
|
||||
// Define value to know what current user can do on properties of edited user
|
||||
if ($id) {
|
||||
// $user est le user qui edite, $id est l'id de l'utilisateur edite
|
||||
// $user is the user doing the edit, $id is the id of the user being edited
|
||||
$permissiontoedit = ((($user->id == $id) && $user->hasRight("user", "self", "write")) || (($user->id != $id) && $user->hasRight("user", "user", "write")));
|
||||
$permissiontoeditpassword = ((($user->id == $id) && $user->hasRight("user", "self", "password")) || (($user->id != $id) && $user->hasRight("user", "user", "password")));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
|||
$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'userhome'; // To manage different context of search
|
||||
|
||||
if (!$user->hasRight('user', 'user', 'lire') && !$user->admin) {
|
||||
// Redirection vers la page de l'utilisateur
|
||||
// Redirect to the user's own page
|
||||
header("Location: card.php?id=".$user->id);
|
||||
exit;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2006-2021 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2024 William Mead <william.mead@manchenumerique.fr>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 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
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
/**
|
||||
* \file htdocs/user/ldap.php
|
||||
* \ingroup ldap
|
||||
* \brief Page fiche LDAP utilisateur
|
||||
* \brief LDAP user record page
|
||||
*/
|
||||
|
||||
// Load Dolibarr environment
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ if (!isset($id) || empty($id)) {
|
|||
}
|
||||
'@phan-var-force int<1,max> $id';
|
||||
|
||||
// $user est le user qui edite, $id est l'id de l'utilisateur edite
|
||||
// $user is the user doing the edit, $id is the id of the user being edited
|
||||
$caneditfield = ((($user->id == $id) && $user->hasRight("user", "self", "write"))
|
||||
|| (($user->id != $id) && $user->hasRight("user", "user", "write")));
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2015 Jean Heimburger <http://tiaris.eu>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -114,7 +114,7 @@ function migrate_user_filespath($u)
|
|||
{
|
||||
global $conf;
|
||||
|
||||
// Les fichiers implodets des users sont toujours sur l'entité 1
|
||||
// User files are always stored on entity 1
|
||||
$dir = $conf->user->dir_output;
|
||||
$origin = $dir.'/'.get_exdir($u->id, 2, 0, 0, $u, 'user');
|
||||
$destin = $dir.'/'.$u->id;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2013 Maxime Kohlhaas <maxime@atm-consulting.fr>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -42,12 +42,6 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
|
|||
}
|
||||
|
||||
require_once $path."../../htdocs/master.inc.php";
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functionscli.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
|
||||
require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
|
||||
require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php";
|
||||
require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php";
|
||||
|
||||
/**
|
||||
* @var Conf $conf
|
||||
* @var DoliDB $db
|
||||
|
|
@ -55,6 +49,11 @@ require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php";
|
|||
* @var Translate $langs
|
||||
* @var User $user
|
||||
*/
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functionscli.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
|
||||
require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
|
||||
require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php";
|
||||
require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php";
|
||||
|
||||
$langs->loadLangs(array("main", "errors"));
|
||||
|
||||
|
|
@ -120,7 +119,7 @@ print "----- To Dolibarr database:\n";
|
|||
print "type=".$conf->db->type."\n";
|
||||
print "host=".$conf->db->host."\n";
|
||||
print "port=".$conf->db->port."\n";
|
||||
print "login=".$conf->db->user."\n";
|
||||
print "login=".(string) $conf->db->user."\n";
|
||||
print "database=".$conf->db->name."\n";
|
||||
print "----- Options:\n";
|
||||
print "commitiferror=".$forcecommit."\n";
|
||||
|
|
@ -198,11 +197,11 @@ if ($result >= 0) {
|
|||
if ($tmpkey === 'count') { // @phpstan-ignore-line
|
||||
continue;
|
||||
}
|
||||
if (empty($userList[$userdn])) { // Récupération de l'utilisateur
|
||||
// Schéma rfc2307: les membres sont listés dans l'attribut memberUid sous form de login uniquement
|
||||
if (empty($userList[$userdn])) { // Fetch the user
|
||||
// rfc2307 schema: members are listed in the memberUid attribute as login names only
|
||||
if (getDolGlobalString('LDAP_GROUP_FIELD_GROUPMEMBERS') === 'memberUid') {
|
||||
$userKey = array($userdn);
|
||||
} else { // Pour les autres schémas, les membres sont listés sous forme de DN completes
|
||||
} else { // For other schemas, members are listed as full DNs
|
||||
$userFilter = explode(',', $userdn);
|
||||
$userKey = $ldap->getAttributeValues('('.$userFilter[0].')', getDolGlobalString('LDAP_KEY_USERS'));
|
||||
}
|
||||
|
|
@ -213,9 +212,9 @@ if ($result >= 0) {
|
|||
$fuser = new User($db);
|
||||
|
||||
if (getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_SID')) {
|
||||
$fuser->fetch(0, '', $userKey[0]); // Chargement du user concerné par le SID
|
||||
$fuser->fetch(0, '', $userKey[0]); // Load the user matched by SID
|
||||
} elseif (getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_LOGIN')) {
|
||||
$fuser->fetch(0, $userKey[0]); // Chargement du user concerné par le login
|
||||
$fuser->fetch(0, $userKey[0]); // Load the user matched by login
|
||||
}
|
||||
|
||||
$userList[$userdn] = $fuser;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
/**
|
||||
* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2025 MDW <mdeweerd@users.noreply.github.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -138,7 +138,7 @@ print "----- To Dolibarr database:\n";
|
|||
print "type=".$conf->db->type."\n";
|
||||
print "host=".$conf->db->host."\n";
|
||||
print "port=".$conf->db->port."\n";
|
||||
print "login=".$conf->db->user."\n";
|
||||
print "login=".(string) $conf->db->user."\n";
|
||||
print "database=".$conf->db->name."\n";
|
||||
print "----- Options:\n";
|
||||
print "commitiferror=".$forcecommit."\n";
|
||||
|
|
@ -204,9 +204,9 @@ if ($result >= 0) {
|
|||
$fuser = new User($db);
|
||||
|
||||
if (getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_SID')) {
|
||||
$fuser->fetch(0, '', $ldapuser[getDolGlobalString('LDAP_KEY_USERS')]); // Chargement du user concerné par le SID
|
||||
$fuser->fetch(0, '', $ldapuser[getDolGlobalString('LDAP_KEY_USERS')]); // Load the user matched by SID
|
||||
} elseif (getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_LOGIN')) {
|
||||
$fuser->fetch(0, $ldapuser[getDolGlobalString('LDAP_KEY_USERS')]); // Chargement du user concerné par le login
|
||||
$fuser->fetch(0, $ldapuser[getDolGlobalString('LDAP_KEY_USERS')]); // Load the user matched by login
|
||||
}
|
||||
|
||||
// Propriete membre
|
||||
|
|
|
|||
Loading…
Reference in a new issue