diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php
index 5a4f3b5fa14..8374547eaf1 100644
--- a/htdocs/commande/list.php
+++ b/htdocs/commande/list.php
@@ -324,6 +324,7 @@ if ($resql)
$var=true;
$total=0;
$subtotal=0;
+ $productstat_cache=array();
$generic_commande = new Commande($db);
$generic_product = new Product($db);
@@ -356,17 +357,32 @@ if ($resql)
if ($generic_commande->lines[$lig]->product_type==0) {
$nbprod++; // order contains real products
$generic_product->id = $generic_commande->lines[$lig]->fk_product;
- $generic_product->load_stock();
+ if (empty($productstat_cache[$generic_commande->lines[$lig]->fk_product])) {
+ $generic_product->load_stock(true);
+ $productstat_cache[$generic_commande->lines[$lig]->fk_product]['stock_reel'] = $generic_product->stock_reel;
+ } else {
+ $generic_product->stock_reel = $productstat_cache[$generic_commande->lines[$lig]->fk_product]['stock_reel'];
+ }
// stock order and stock order_supplier
$stock_order=0;
$stock_order_supplier=0;
if (! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT)) {
if (! empty($conf->commande->enabled)) {
- $generic_product->load_stats_commande(0,'1,2');
+ if (empty($productstat_cache[$generic_commande->lines[$lig]->fk_product]['stats_order_customer'])) {
+ $generic_product->load_stats_commande(0,'1,2',true);
+ $productstat_cache[$generic_commande->lines[$lig]->fk_product]['stats_order_customer'] = $generic_product->stats_commande['qty'];
+ } else {
+ $generic_product->stats_commande['qty'] = $productstat_cache[$generic_commande->lines[$lig]->fk_product]['stats_order_customer'];
+ }
$stock_order=$generic_product->stats_commande['qty'];
}
if (! empty($conf->fournisseur->enabled)) {
- $generic_product->load_stats_commande_fournisseur(0,'3');
+ if (empty($productstat_cache[$generic_commande->lines[$lig]->fk_product]['stats_order_supplier'])) {
+ $generic_product->load_stats_commande_fournisseur(0,'3',true);
+ $productstat_cache[$generic_commande->lines[$lig]->fk_product]['stats_order_supplier'] = $generic_product->stats_commande_fournisseur['qty'];
+ } else {
+ $generic_product->stats_commande_fournisseur['qty'] = $productstat_cache[$generic_commande->lines[$lig]->fk_product]['stats_order_supplier'];
+ }
$stock_order_supplier=$generic_product->stats_commande_fournisseur['qty'];
}
}
diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php
index b9a88fd0156..eb224e0748d 100644
--- a/htdocs/contrat/card.php
+++ b/htdocs/contrat/card.php
@@ -1260,7 +1260,7 @@ else
* Lines of contracts
*/
- if ($conf->product->enabled) {
+ if ($conf->product->enabled || $conf->service->enabled) {
$productstatic=new Product($db);
}
@@ -1329,7 +1329,7 @@ else
$productstatic->ref=$objp->label;
print $productstatic->getNomUrl(0,'',16);
}
- if (! empty($conf->global->PRODUIT_DESC_IN_FORM) and $objp->description)
+ if (! empty($conf->global->PRODUIT_DESC_IN_FORM) && !empty($objp->description))
print '
'.dol_nl2br($objp->description);
print '';
}
diff --git a/htdocs/contrat/class/index.html b/htdocs/contrat/class/index.html
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index daed685ce63..6af9f298e8e 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -2458,7 +2458,7 @@ function dol_print_error($db='',$error='')
if ($_SERVER['DOCUMENT_ROOT']) // Mode web
{
$out.=$langs->trans("DolibarrHasDetectedError").".
\n";
- if (! empty($conf->global->MAIN_FEATURES_LEVEL)) $out.="You use an experimental level of features, so please do NOT report any bugs, anywhere, until going back to MAIN_FEATURES_LEVEL = 0.
\n";
+ if (! empty($conf->global->MAIN_FEATURES_LEVEL)) $out.="You use an experimental level of features, so please do NOT report any bugs, except if problem is confirmed moving option MAIN_FEATURES_LEVEL back to 0.
\n";
$out.=$langs->trans("InformationToHelpDiagnose").":
\n";
$out.="".$langs->trans("Date").": ".dol_print_date(time(),'dayhourlog')."
\n";
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index f304d71b1c1..e018a45eab9 100755
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -294,7 +294,7 @@ DoNotUseInProduction=Do not use in production
ThisIsProcessToFollow=This is setup to process:
StepNb=Step %s
FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
-DownloadPackageFromWebSite=Download package.
+DownloadPackageFromWebSite=Download package %s.
UnpackPackageInDolibarrRoot=Unpack package file into Dolibarr's root directory %s
SetupIsReadyForUse=Install is finished and Dolibarr is ready to use with this new component.
NotExistsDirect=The alternative root directory is not defined.
diff --git a/htdocs/langs/en_US/ecm.lang b/htdocs/langs/en_US/ecm.lang
index fe09bda787b..bbbf2d3a046 100644
--- a/htdocs/langs/en_US/ecm.lang
+++ b/htdocs/langs/en_US/ecm.lang
@@ -43,6 +43,8 @@ ECMDocsByContracts=Documents linked to contracts
ECMDocsByInvoices=Documents linked to customers invoices
ECMDocsByProducts=Documents linked to products
ECMDocsByProjects=Documents linked to projects
+ECMDocsByUsers=Documents linked to users
+ECMDocsByInterventions=Documents linked to interventions
ECMNoDirectoryYet=No directory created
ShowECMSection=Show directory
DeleteSection=Remove directory
diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang
index ebc724edf5c..4b77cba7a9c 100755
--- a/htdocs/langs/en_US/products.lang
+++ b/htdocs/langs/en_US/products.lang
@@ -26,11 +26,11 @@ ProductsAndServicesOnSell=Available Products and Services
ProductsAndServicesNotOnSell=Obsolete Products and Services
ProductsAndServicesStatistics=Products and Services statistics
ProductsStatistics=Products statistics
-ProductsOnSell=Available products
-ProductsNotOnSell=Obsolete products
+ProductsOnSell=Product for sale or for pruchase
+ProductsNotOnSell=Product out of sale and out of purchase
ProductsOnSellAndOnBuy=Products for sale and for purchase
-ServicesOnSell=Available services
-ServicesNotOnSell=Obsolete services
+ServicesOnSell=Services for sale or for pruchase
+ServicesNotOnSell=Services out of sale
ServicesOnSellAndOnBuy=Services for sale and for purchase
InternalRef=Internal reference
LastRecorded=Last products/services on sell recorded