diff --git a/ChangeLog b/ChangeLog
index 33459d4f234..7c41bbfaac0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -28,8 +28,8 @@ Following changes may create regressions for some external modules, but were nec
For users:
---------------
-NEW: PHP 8.1 compatibility:
- Warning!! Application works correctly with PHP8 and 8.1 but you will experience a lot of PHP warnings into the PHP server
+NEW: PHP 8.0 and 8.1 compatibility (with mysql):
+ Warning!! Application works correctly with PHP 8.0 and 8.1 but you will experience a lot of PHP warnings into the PHP server
log files (depending on your PHP setup). Removal of all PHP warnings on server side is planned for v17.
NEW: Support for recurring purchase invoices.
NEW: #20292 Include German public holidays
diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php
index 0b2a060d7a2..ebd7df6bbc8 100644
--- a/htdocs/accountancy/class/bookkeeping.class.php
+++ b/htdocs/accountancy/class/bookkeeping.class.php
@@ -169,6 +169,16 @@ class BookKeeping extends CommonObject
*/
public $piece_num;
+ /**
+ * @var integer|string date of movement validated & lock
+ */
+ public $date_validation;
+
+ /**
+ * @var integer|string date of movement who are noticed like exported
+ */
+ public $date_export;
+
/**
* @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
*/
@@ -788,8 +798,7 @@ class BookKeeping extends CommonObject
$this->piece_num = $obj->piece_num;
$this->date_creation = $this->db->jdate($obj->date_creation);
$this->date_export = $this->db->jdate($obj->date_export);
- $this->date_validation = $this->db->jdate($obj->date_validated);
- $this->date_validation = $this->db->jdate($obj->date_validation);
+ $this->date_validation = isset($obj->date_validated) ? $this->db->jdate($obj->date_validated) : '';
}
$this->db->free($resql);
diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php
index 34faba7e27c..d2b37c11a87 100644
--- a/htdocs/accountancy/journal/purchasesjournal.php
+++ b/htdocs/accountancy/journal/purchasesjournal.php
@@ -294,9 +294,7 @@ if ($action == 'writebookkeeping') {
$companystatic->id = $tabcompany[$key]['id'];
$companystatic->name = $tabcompany[$key]['name'];
- $companystatic->code_compta = $tabcompany[$key]['code_compta'];
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
- $companystatic->code_client = $tabcompany[$key]['code_client'];
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
$companystatic->fournisseur = 1;
@@ -636,9 +634,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
foreach ($tabfac as $key => $val) {
$companystatic->id = $tabcompany[$key]['id'];
$companystatic->name = $tabcompany[$key]['name'];
- $companystatic->code_compta = $tabcompany[$key]['code_compta'];
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
- $companystatic->code_client = $tabcompany[$key]['code_client'];
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
$companystatic->fournisseur = 1;
@@ -767,7 +763,7 @@ if (empty($action) || $action == 'view') {
$periodlink = '';
$exportlink = '';
$builddate = dol_now();
- $description .= $langs->trans("DescJournalOnlyBindedVisible").'
';
+ $description = $langs->trans("DescJournalOnlyBindedVisible").'
';
if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
$description .= $langs->trans("DepositsAreNotIncluded");
} else {
@@ -847,9 +843,7 @@ if (empty($action) || $action == 'view') {
foreach ($tabfac as $key => $val) {
$companystatic->id = $tabcompany[$key]['id'];
$companystatic->name = $tabcompany[$key]['name'];
- $companystatic->code_compta = $tabcompany[$key]['code_compta'];
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
- $companystatic->code_client = $tabcompany[$key]['code_client'];
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
$companystatic->fournisseur = 1;
diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php
index d34d1f5c3dc..675c900680d 100644
--- a/htdocs/accountancy/journal/sellsjournal.php
+++ b/htdocs/accountancy/journal/sellsjournal.php
@@ -311,9 +311,7 @@ if ($action == 'writebookkeeping') {
$companystatic->id = $tabcompany[$key]['id'];
$companystatic->name = $tabcompany[$key]['name'];
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
- $companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
$companystatic->code_client = $tabcompany[$key]['code_client'];
- $companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
$companystatic->client = 3;
$invoicestatic->id = $key;
@@ -601,9 +599,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
$companystatic->id = $tabcompany[$key]['id'];
$companystatic->name = $tabcompany[$key]['name'];
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
- $companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
$companystatic->code_client = $tabcompany[$key]['code_client'];
- $companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
$companystatic->client = 3;
$invoicestatic->id = $key;
@@ -791,9 +787,7 @@ if (empty($action) || $action == 'view') {
$companystatic->id = $tabcompany[$key]['id'];
$companystatic->name = $tabcompany[$key]['name'];
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
- $companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
$companystatic->code_client = $tabcompany[$key]['code_client'];
- $companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
$companystatic->client = 3;
$invoicestatic->id = $key;
diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php
index 0ef143d36ad..edfebdcf1b2 100644
--- a/htdocs/api/class/api.class.php
+++ b/htdocs/api/class/api.class.php
@@ -163,6 +163,7 @@ class DolibarrApi
unset($object->statuts_short);
unset($object->statuts_logo);
unset($object->statuts_long);
+
//unset($object->labelStatus);
//unset($object->labelStatusShort);
@@ -184,6 +185,7 @@ class DolibarrApi
unset($object->picto);
unset($object->fieldsforcombobox);
+ unset($object->regeximgext);
unset($object->skip_update_total);
unset($object->context);
@@ -259,6 +261,11 @@ class DolibarrApi
if (!empty($object->thirdparty) && is_object($object->thirdparty)) {
$this->_cleanObjectDatas($object->thirdparty);
}
+
+ if (!empty($object->product) && is_object($object->product)) {
+ $this->_cleanObjectDatas($object->product);
+ }
+
return $object;
}
diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php
index c271b7479be..af14185b3d0 100644
--- a/htdocs/bom/class/bom.class.php
+++ b/htdocs/bom/class/bom.class.php
@@ -1320,12 +1320,19 @@ class BOM extends CommonObject
*/
public function calculateCosts()
{
- global $conf;
+ global $conf, $hookmanager;
include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
$this->unit_cost = 0;
$this->total_cost = 0;
+ $parameters=array();
+ $reshook = $hookmanager->executeHooks('calculateCostsBom', $parameters, $this); // Note that $action and $object may have been modified by hook
+
+ if ($reshook > 0) {
+ return $hookmanager->resPrint;
+ }
+
if (is_array($this->lines) && count($this->lines)) {
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
$productFournisseur = new ProductFournisseur($this->db);
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index 0eaa9078cd7..7d21f4db1b6 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -1262,7 +1262,7 @@ class Propal extends CommonObject
break;
}
// Defined the new fk_parent_line
- if ($result > 0) {
+ if ($result > 0 && $line->product_type == 9) {
$fk_parent_line = $result;
}
}
diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php
index d189eb22851..b02223691af 100644
--- a/htdocs/commande/card.php
+++ b/htdocs/commande/card.php
@@ -435,7 +435,7 @@ if (empty($reshook)) {
}
// Defined the new fk_parent_line
- if ($result > 0) {
+ if ($result > 0 && $lines[$i]->product_type == 9) {
$fk_parent_line = $result;
}
}
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 8b0967c64b6..baa20d27c18 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -1073,7 +1073,7 @@ class Commande extends CommonOrder
return -1;
}
// Defined the new fk_parent_line
- if ($result > 0) {
+ if ($result > 0 && $line->product_type == 9) {
$fk_parent_line = $result;
}
}
diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php
index 9062d98ae93..1975bf9c8e2 100644
--- a/htdocs/compta/facture/card.php
+++ b/htdocs/compta/facture/card.php
@@ -1251,7 +1251,7 @@ if (empty($reshook)) {
$object->lines[] = $line; // insert new line in current object
// Defined the new fk_parent_line
- if ($result > 0) {
+ if ($result > 0 && $line->product_type == 9) {
$fk_parent_line = $result;
}
}
@@ -1772,7 +1772,7 @@ if (empty($reshook)) {
}
// Defined the new fk_parent_line
- if ($result > 0) {
+ if ($result > 0 && $lines[$i]->product_type == 9) {
$fk_parent_line = $result;
}
}
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index f1e7ddd4bc2..632c61b4449 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -872,7 +872,7 @@ class Facture extends CommonInvoice
);
// Defined the new fk_parent_line
- if ($result > 0) {
+ if ($result > 0 && $newinvoiceline->product_type == 9) {
$fk_parent_line = $result;
}
}
diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php
index d87317e2420..a1dcdba6f58 100644
--- a/htdocs/compta/prelevement/class/bonprelevement.class.php
+++ b/htdocs/compta/prelevement/class/bonprelevement.class.php
@@ -454,9 +454,6 @@ class BonPrelevement extends CommonObject
dol_syslog(get_class($this)."::set_infocredit AddPaymentToBank Error ".$this->error);
}
}
- //var_dump($paiement->amounts);
- //var_dump($thirdpartyid);
- //var_dump($cursoramounts);
}
// Update withdrawal line
@@ -1057,9 +1054,9 @@ class BonPrelevement extends CommonObject
$this->emetteur_iban = $account->iban;
$this->emetteur_bic = $account->bic;
- $this->emetteur_ics = ($type == 'bank-transfer' ? $account->ics_transfer : $account->ics);
+ $this->emetteur_ics = ($type == 'bank-transfer' ? $account->ics_transfer : $account->ics);
- $this->raison_sociale = $account->proprio;
+ $this->raison_sociale = $account->proprio;
}
$this->factures = $factures_prev_id;
@@ -2208,7 +2205,8 @@ class BonPrelevement extends CommonObject
$XML_SEPA_INFO .= ' '.$CrLf;*/
}
} else {
- fputs($this->file, 'INCORRECT EMETTEUR '.$XML_SEPA_INFO.$CrLf);
+ fputs($this->file, 'INCORRECT EMETTEUR '.$this->raison_sociale.$CrLf);
+ $XML_SEPA_INFO = '';
}
return $XML_SEPA_INFO;
}
diff --git a/htdocs/compta/stats/index.php b/htdocs/compta/stats/index.php
index 53d445a4749..8e20f5b0afd 100644
--- a/htdocs/compta/stats/index.php
+++ b/htdocs/compta/stats/index.php
@@ -270,8 +270,8 @@ if ($result) {
$i = 0;
while ($i < $num) {
$obj = $db->fetch_object($result);
- $cum_ht[$obj->dm] = !empty($obj->amount) ? $obj->amount : 0;
- $cum[$obj->dm] = $obj->amount_ttc;
+ $cum_ht[$obj->dm] = empty($obj->amount) ? 0 : $obj->amount;
+ $cum[$obj->dm] = empty($obj->amount_ttc) ? 0 : $obj->amount_ttc;
if ($obj->amount_ttc) {
$minyearmonth = ($minyearmonth ? min($minyearmonth, $obj->dm) : $obj->dm);
$maxyearmonth = max($maxyearmonth, $obj->dm);
@@ -303,7 +303,11 @@ if ($modecompta == 'RECETTES-DEPENSES') {
$i = 0;
while ($i < $num) {
$obj = $db->fetch_object($result);
- $cum[$obj->dm] += $obj->amount_ttc;
+ if (empty($cum[$obj->dm])) {
+ $cum[$obj->dm] = $obj->amount_ttc;
+ } else {
+ $cum[$obj->dm] += $obj->amount_ttc;
+ }
if ($obj->amount_ttc) {
$minyearmonth = ($minyearmonth ?min($minyearmonth, $obj->dm) : $obj->dm);
$maxyearmonth = max($maxyearmonth, $obj->dm);
@@ -405,12 +409,6 @@ for ($mois = 1 + $nb_mois_decalage; $mois <= 12 + $nb_mois_decalage; $mois++) {
$case = dol_print_date(dol_mktime(1, 1, 1, $mois_modulo, 1, $annee_decalage), "%Y-%m");
$caseprev = dol_print_date(dol_mktime(1, 1, 1, $mois_modulo, 1, $annee_decalage - 1), "%Y-%m");
- $total_ht[$annee]=0;
- $total[$annee]=0;
- $cum_ht[$case]=0;
- $cum[$case]=0;
-
-
if ($annee >= $year_start) { // We ignore $annee < $year_start, we loop on it to be able to make delta, nothing is output.
if ($modecompta == 'CREANCES-DETTES') {
// Value turnover of month w/o VAT
@@ -453,7 +451,7 @@ for ($mois = 1 + $nb_mois_decalage; $mois <= 12 + $nb_mois_decalage; $mois++) {
print "";
// Percentage of month
- print '
';
+ print ' | ';
//var_dump($annee.' '.$year_end.' '.$mois.' '.$month_end);
if ($annee < $year_end || ($annee == $year_end && $mois <= $month_end)) {
if ($annee_decalage > $minyear && $case <= $casenow) {
@@ -483,7 +481,7 @@ for ($mois = 1 + $nb_mois_decalage; $mois <= 12 + $nb_mois_decalage; $mois++) {
}
}
}
- print ' | ';
+ print '';
if ($annee_decalage < $year_end || ($annee_decalage == $year_end && $mois > 12 && $annee < $year_end)) {
print ' | ';
diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php
index 21afb5f3490..4dbdd9f5be8 100644
--- a/htdocs/core/lib/accounting.lib.php
+++ b/htdocs/core/lib/accounting.lib.php
@@ -274,6 +274,9 @@ function getDefaultDatesForTransfer()
{
global $db, $conf;
+ $pastmonth = 0;
+ $pastmonthyear = 0;
+
// Period by default on transfer (0: previous month | 1: current month | 2: fiscal year)
$periodbydefaultontransfer = (empty($conf->global->ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER) ? 0 : $conf->global->ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER);
if ($periodbydefaultontransfer == 2) {
diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php
index 3b3077425a5..92a0255d76d 100644
--- a/htdocs/core/lib/files.lib.php
+++ b/htdocs/core/lib/files.lib.php
@@ -2992,10 +2992,10 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity,
// Wrapping for import module
$accessallowed = $user->rights->import->run;
$original_file = $conf->import->dir_temp.'/'.$original_file;
- } elseif ($modulepart == 'recruitment' && !empty($conf->recruitment->dir_temp)) {
- // Wrapping for recruitment module
- $accessallowed = $user->rights->$modulepart->recruitmentjobposition->read;
- $original_file = $conf->recruitment->dir_output .'/'. $original_file;
+ } elseif ($modulepart == 'recruitment' && !empty($conf->recruitment->dir_output)) {
+ // Wrapping for recruitment module
+ $accessallowed = $user->rights->recruitment->recruitmentjobposition->read;
+ $original_file = $conf->recruitment->dir_output.'/'.$original_file;
} elseif ($modulepart == 'editor' && !empty($conf->fckeditor->dir_output)) {
// Wrapping for wysiwyg editor
$accessallowed = 1;
diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php
index cad97108733..ba34b1283c9 100644
--- a/htdocs/core/lib/functions2.lib.php
+++ b/htdocs/core/lib/functions2.lib.php
@@ -2655,7 +2655,7 @@ function getModuleDirForApiClass($moduleobject)
$moduledirforclass = 'fichinter';
} elseif ($moduleobject == 'mos') {
$moduledirforclass = 'mrp';
- } elseif (in_array($moduleobject, array('products', 'expensereports', 'users', 'tickets', 'boms'))) {
+ } elseif (in_array($moduleobject, array('products', 'expensereports', 'users', 'tickets', 'boms', 'receptions'))) {
$moduledirforclass = preg_replace('/s$/', '', $moduleobject);
}
diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
index 76dc8950670..ee4e43bb444 100644
--- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
+++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
@@ -1195,7 +1195,7 @@ class pdf_crabe extends ModelePDFFactures
require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
global $langs;
- $langs->loadLangs(array('payment', 'paybox'));
+ $langs->loadLangs(array('payment', 'paybox', 'stripe'));
$servicename = $langs->transnoentities('Online');
$paiement_url = getOnlinePaymentUrl('', 'invoice', $object->ref, '', '', '');
$linktopay = $langs->trans("ToOfferALinkForOnlinePayment", $servicename).' '.$outputlangs->transnoentities("ClickHere").'';
diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php
index 6a674a770ec..500b2c7ba4a 100644
--- a/htdocs/expedition/class/expedition.class.php
+++ b/htdocs/expedition/class/expedition.class.php
@@ -217,11 +217,11 @@ class Expedition extends CommonObject
$this->statuts[2] = 'StatusSendingProcessed';
// List of short language codes for status
- $this->statutshorts = array();
- $this->statutshorts[-1] = 'StatusSendingCanceledShort';
- $this->statutshorts[0] = 'StatusSendingDraftShort';
- $this->statutshorts[1] = 'StatusSendingValidatedShort';
- $this->statutshorts[2] = 'StatusSendingProcessedShort';
+ $this->statuts_short = array();
+ $this->statuts_short[-1] = 'StatusSendingCanceledShort';
+ $this->statuts_short[0] = 'StatusSendingDraftShort';
+ $this->statuts_short[1] = 'StatusSendingValidatedShort';
+ $this->statuts_short[2] = 'StatusSendingProcessedShort';
}
/**
@@ -1884,7 +1884,7 @@ class Expedition extends CommonObject
global $langs;
$labelStatus = $langs->transnoentitiesnoconv($this->statuts[$status]);
- $labelStatusShort = $langs->transnoentitiesnoconv($this->statutshorts[$status]);
+ $labelStatusShort = $langs->transnoentitiesnoconv($this->statuts_short[$status]);
$statusType = 'status'.$status;
if ($status == self::STATUS_VALIDATED) {
diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
index d495035b5f6..9b1513b676a 100644
--- a/htdocs/fourn/class/fournisseur.commande.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.class.php
@@ -751,7 +751,7 @@ class CommandeFournisseur extends CommonOrder
// phpcs:enable
global $conf, $langs, $hookmanager;
- if (empty($this->statuts) || empty($this->statutshort)) {
+ if (empty($this->statuts) || empty($this->statuts_short)) {
$langs->load('orders');
$this->statuts[0] = 'StatusSupplierOrderDraft';
@@ -769,15 +769,15 @@ class CommandeFournisseur extends CommonOrder
$this->statuts[9] = 'StatusSupplierOrderRefused';
// List of language codes for status
- $this->statutshort[0] = 'StatusSupplierOrderDraftShort';
- $this->statutshort[1] = 'StatusSupplierOrderValidatedShort';
- $this->statutshort[2] = 'StatusSupplierOrderApprovedShort';
- $this->statutshort[3] = 'StatusSupplierOrderOnProcessShort';
- $this->statutshort[4] = 'StatusSupplierOrderReceivedPartiallyShort';
- $this->statutshort[5] = 'StatusSupplierOrderReceivedAllShort';
- $this->statutshort[6] = 'StatusSupplierOrderCanceledShort';
- $this->statutshort[7] = 'StatusSupplierOrderCanceledShort';
- $this->statutshort[9] = 'StatusSupplierOrderRefusedShort';
+ $this->statuts_short[0] = 'StatusSupplierOrderDraftShort';
+ $this->statuts_short[1] = 'StatusSupplierOrderValidatedShort';
+ $this->statuts_short[2] = 'StatusSupplierOrderApprovedShort';
+ $this->statuts_short[3] = 'StatusSupplierOrderOnProcessShort';
+ $this->statuts_short[4] = 'StatusSupplierOrderReceivedPartiallyShort';
+ $this->statuts_short[5] = 'StatusSupplierOrderReceivedAllShort';
+ $this->statuts_short[6] = 'StatusSupplierOrderCanceledShort';
+ $this->statuts_short[7] = 'StatusSupplierOrderCanceledShort';
+ $this->statuts_short[9] = 'StatusSupplierOrderRefusedShort';
}
$statustrans = array(
@@ -806,7 +806,7 @@ class CommandeFournisseur extends CommonOrder
}
$statusLong = $langs->transnoentitiesnoconv($this->statuts[$status]).$billedtext;
- $statusShort = $langs->transnoentitiesnoconv($this->statutshort[$status]);
+ $statusShort = $langs->transnoentitiesnoconv($this->statuts_short[$status]);
$parameters = array('status' => $status, 'mode' => $mode, 'billed' => $billed);
$reshook = $hookmanager->executeHooks('LibStatut', $parameters, $this); // Note that $action and $object may have been modified by hook
diff --git a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php
index dfb1e371636..7c8e4acb25f 100644
--- a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php
@@ -131,9 +131,9 @@ class CommandeFournisseurDispatch extends CommonObjectLine
$this->statuts[0] = 'Received';
$this->statuts[1] = 'Verified';
$this->statuts[2] = 'Denied';
- $this->statutshort[0] = 'Received';
- $this->statutshort[1] = 'Verified';
- $this->statutshort[2] = 'Denied';
+ $this->statuts_short[0] = 'Received';
+ $this->statuts_short[1] = 'Verified';
+ $this->statuts_short[2] = 'Denied';
}
@@ -580,7 +580,7 @@ class CommandeFournisseurDispatch extends CommonObjectLine
if ($mode == 0) {
return $langs->trans($this->statuts[$status]);
} elseif ($mode == 1) {
- return $langs->trans($this->statutshort[$status]);
+ return $langs->trans($this->statuts_short[$status]);
} elseif ($mode == 2) {
return $langs->trans($this->statuts[$status]);
} elseif ($mode == 3) {
@@ -601,11 +601,11 @@ class CommandeFournisseurDispatch extends CommonObjectLine
}
} elseif ($mode == 5) {
if ($status == 0) {
- return ''.$langs->trans($this->statutshort[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut0');
+ return ''.$langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut0');
} elseif ($status == 1) {
- return ''.$langs->trans($this->statutshort[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut4');
+ return ''.$langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut4');
} elseif ($status == 2) {
- return ''.$langs->trans($this->statutshort[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut8');
+ return ''.$langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut8');
}
}
}
diff --git a/htdocs/mrp/mo_production.php b/htdocs/mrp/mo_production.php
index 9fa25f3cf54..7b11ecd7e81 100644
--- a/htdocs/mrp/mo_production.php
+++ b/htdocs/mrp/mo_production.php
@@ -1027,6 +1027,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
$disable = 'disabled';
}
+ // input hidden with fk_product of line
+ print '';
+
// Qty
print ' | ';
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index 69e1f0c8357..d68a320482e 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -4830,7 +4830,7 @@ class Product extends CommonObject
$sql .= " AND pa.fk_product_fils <> ".((int) $id); // This should not happens, it is to avoid infinite loop if it happens
$sql.= " ORDER BY pa.rang";
- dol_syslog(get_class($this).'::getChildsArbo id='.$id.' level='.$level. ' parents='.$parents, LOG_DEBUG);
+ dol_syslog(get_class($this).'::getChildsArbo id='.$id.' level='.$level. ' parents='.implode(',', $parents), LOG_DEBUG);
if ($level == 1) {
$alreadyfound = array($id=>1); // We init array of found object to start of tree, so if we found it later (should not happened), we stop immediatly
diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php
index 31144a708c7..26b5ee7f3b8 100644
--- a/htdocs/projet/list.php
+++ b/htdocs/projet/list.php
@@ -71,8 +71,8 @@ if (!$user->rights->projet->lire) {
$diroutputmassaction = $conf->project->dir_output.'/temp/massgeneration/'.$user->id;
$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
-$sortfield = GETPOST("sortfield", "aZ09comma");
-$sortorder = GETPOST("sortorder", 'aZ09comma');
+$sortfield = GETPOST('sortfield', 'aZ09comma');
+$sortorder = GETPOST('sortorder', 'aZ09comma');
$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
// If $page is not defined, or '' or -1 or if we click on clear filters
@@ -229,7 +229,8 @@ $arrayfields = dol_sort_array($arrayfields, 'position');
*/
if (GETPOST('cancel', 'alpha')) {
- $action = 'list'; $massaction = '';
+ $action = 'list';
+ $massaction = '';
}
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
$massaction = '';
@@ -356,13 +357,22 @@ if (empty($reshook)) {
* View
*/
-$companystatic = new Societe($db);
$form = new Form($db);
+
+$companystatic = new Societe($db);
$formother = new FormOther($db);
$formproject = new FormProjets($db);
$help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos";
-$title = $langs->trans("Projects");
+$title = $langs->trans("LeadsOrProjects");
+if (empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
+ $title = $langs->trans("Projects");
+}
+if (isset($conf->global->PROJECT_USE_OPPORTUNITIES) && $conf->global->PROJECT_USE_OPPORTUNITIES == 2) { // 2 = leads only
+ $title = $langs->trans("Leads");
+}
+$morejs = array();
+$morecss = array();
// Get list of project id allowed to user (in a string list separated by comma)
@@ -1190,8 +1200,12 @@ $totalarray = array(
'nbfield' => 0,
'val' => array(),
);
-while ($i < min($num, $limit)) {
+$imaxinloop = ($limit ? min($num, $limit) : $num);
+while ($i < $imaxinloop) {
$obj = $db->fetch_object($resql);
+ if (empty($obj)) {
+ break; // Should not happen
+ }
$object->id = $obj->id;
$object->user_author_id = $obj->fk_user_creat;
@@ -1648,14 +1662,26 @@ while ($i < min($num, $limit)) {
// Show total line
include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
+// If no record found
+if ($num == 0) {
+ $colspan = 1;
+ foreach ($arrayfields as $key => $val) {
+ if (!empty($val['checked'])) {
+ $colspan++;
+ }
+ }
+ print '| '.$langs->trans("NoRecordFound").' |
';
+}
+
$db->free($resql);
-$parameters = array('sql' => $sql);
-$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook
+$parameters = array('arrayfields'=>$arrayfields, 'sql' => $sql);
+$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
print $hookmanager->resPrint;
print "\n";
print '';
+
print "\n";
// End of page
diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php
index 85071a49b94..dcfc3e64884 100644
--- a/htdocs/reception/class/reception.class.php
+++ b/htdocs/reception/class/reception.class.php
@@ -149,11 +149,11 @@ class Reception extends CommonObject
$this->statuts[2] = 'StatusReceptionProcessed';
// List of short language codes for status
- $this->statutshorts = array();
- $this->statutshorts[-1] = 'StatusReceptionCanceledShort';
- $this->statutshorts[0] = 'StatusReceptionDraftShort';
- $this->statutshorts[1] = 'StatusReceptionValidatedShort';
- $this->statutshorts[2] = 'StatusReceptionProcessedShort';
+ $this->statuts_short = array();
+ $this->statuts_short[-1] = 'StatusReceptionCanceledShort';
+ $this->statuts_short[0] = 'StatusReceptionDraftShort';
+ $this->statuts_short[1] = 'StatusReceptionValidatedShort';
+ $this->statuts_short[2] = 'StatusReceptionProcessedShort';
}
/**
@@ -456,8 +456,8 @@ class Reception extends CommonObject
$this->brouillon = 1;
}
- $file = $conf->reception->dir_output."/".get_exdir($this->id, 2, 0, 0, $this, 'reception')."/".$this->id.".pdf";
- $this->pdf_filename = $file;
+ //$file = $conf->reception->dir_output."/".get_exdir(0, 0, 0, 1, $this, 'reception')."/".$this->id.".pdf";
+ //$this->pdf_filename = $file;
// Tracking url
$this->getUrlTrackingStatus($obj->tracking_number);
@@ -1177,6 +1177,8 @@ class Reception extends CommonObject
$line = new CommandeFournisseurDispatch($this->db);
$line->fetch($obj->rowid);
+
+ // TODO Remove or keep this ?
$line->fetch_product();
$sql_commfourndet = 'SELECT qty, ref, label, description, tva_tx, vat_src_code, subprice, multicurrency_subprice, remise_percent';
@@ -1304,7 +1306,7 @@ class Reception extends CommonObject
global $langs;
$labelStatus = $langs->transnoentitiesnoconv($this->statuts[$status]);
- $labelStatusShort = $langs->transnoentitiesnoconv($this->statutshorts[$status]);
+ $labelStatusShort = $langs->transnoentitiesnoconv($this->statuts_short[$status]);
$statusType = 'status'.$status;
if ($status == self::STATUS_VALIDATED) {
diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php
index f7c28d7ebd9..126bebae64f 100644
--- a/htdocs/user/class/user.class.php
+++ b/htdocs/user/class/user.class.php
@@ -744,6 +744,9 @@ class User extends CommonObject
// If module is abc@module, we check permission user->rights->module->abc->permlevel1
$tmp = explode('@', $rightsPath, 2);
if (!empty($tmp[1])) {
+ if (strpos($module, '@') !== false) {
+ $module = $tmp[1];
+ }
$rightsPath = $tmp[1];
$permlevel2 = $permlevel1;
$permlevel1 = $tmp[0];