diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php
index 31a11f260f9..847b20783b2 100644
--- a/htdocs/admin/tools/dolibarr_export.php
+++ b/htdocs/admin/tools/dolibarr_export.php
@@ -50,7 +50,7 @@ if (! $user->admin)
if ($action == 'delete')
{
- $file=$conf->admin->dir_output.'/backup/'.GETPOST('urlfile');
+ $file=$conf->admin->dir_output.'/'.GETPOST('urlfile');
$ret=dol_delete_file($file, 1);
if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
diff --git a/htdocs/admin/tools/export.php b/htdocs/admin/tools/export.php
index 8dbd7a1912e..4e85a4d3096 100644
--- a/htdocs/admin/tools/export.php
+++ b/htdocs/admin/tools/export.php
@@ -58,7 +58,7 @@ if ($file && ! $what)
if ($action == 'delete')
{
- $file=$conf->admin->dir_output.'/backup/'.GETPOST('urlfile');
+ $file=$conf->admin->dir_output.'/'.GETPOST('urlfile');
$ret=dol_delete_file($file, 1);
if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
@@ -451,46 +451,53 @@ function backup_tables($outputfile, $tables='*')
//fwrite($handle,"/*!40101 SET character_set_client = utf8 */;\n");
$resqldrop=$db->query('SHOW CREATE TABLE '.$table);
$row2 = $db->fetch_row($resqldrop);
- fwrite($handle,$row2[1].";\n");
- //fwrite($handle,"/*!40101 SET character_set_client = @saved_cs_client */;\n\n");
-
-
- // Dumping the data (locking the table and disabling the keys check while doing the process)
- fwrite($handle, "\n--\n-- Dumping data for table `".$table."`\n--\n");
- if (!GETPOST("nobin_nolocks")) fwrite($handle, "LOCK TABLES `".$table."` WRITE;\n"); // Lock the table before inserting data (when the data will be imported back)
- if (GETPOST("nobin_disable_fk")) fwrite($handle, "ALTER TABLE `".$table."` DISABLE KEYS;\n");
-
- $sql='SELECT * FROM '.$table;
- $result = $db->query($sql);
- $num_fields = $db->num_rows($result);
- while($row = $db->fetch_row($result)) {
- // For each row of data we print a line of INSERT
- fwrite($handle,'INSERT '.$delayed.$ignore.'INTO `'.$table.'` VALUES (');
- $columns = count($row);
- for($j=0; $j<$columns; $j++) {
- // Processing each columns of the row to ensure that we correctly save the value (eg: add quotes for string - in fact we add quotes for everything, it's easier)
- if ($row[$j] == null and !is_string($row[$j])) {
- // IMPORTANT: if the field is NULL we set it NULL
- $row[$j] = 'NULL';
- } elseif(is_string($row[$j]) and $row[$j] == '') {
- // if it's an empty string, we set it as an empty string
- $row[$j] = "''";
- } elseif(is_numeric($row[$j]) and !strcmp($row[$j], $row[$j]+0) ) { // test if it's a numeric type and the numeric version ($nb+0) == string version (eg: if we have 01, it's probably not a number but rather a string, else it would not have any leading 0)
- // if it's a number, we return it as-is
- $row[$j] = $row[$j];
- } else { // else for all other cases we escape the value and put quotes around
- $row[$j] = addslashes($row[$j]);
- $row[$j] = preg_replace("#\n#", "\\n", $row[$j]);
- $row[$j] = "'".$row[$j]."'";
- }
- }
- fwrite($handle,implode(',', $row).");\n");
+ if (empty($row2[1]))
+ {
+ fwrite($handle, "\n-- WARNING: Show create table ".$table." return empy string when it should not.\n");
}
- if (GETPOST("nobin_disable_fk")) fwrite($handle, "ALTER TABLE `".$table."` ENABLE KEYS;\n"); // Enabling back the keys/index checking
- if (!GETPOST("nobin_nolocks")) fwrite($handle, "UNLOCK TABLES;\n"); // Unlocking the table
- fwrite($handle,"\n\n\n");
- }
+ else
+ {
+ fwrite($handle,$row2[1].";\n");
+ //fwrite($handle,"/*!40101 SET character_set_client = @saved_cs_client */;\n\n");
+ // Dumping the data (locking the table and disabling the keys check while doing the process)
+ fwrite($handle, "\n--\n-- Dumping data for table `".$table."`\n--\n");
+ if (!GETPOST("nobin_nolocks")) fwrite($handle, "LOCK TABLES `".$table."` WRITE;\n"); // Lock the table before inserting data (when the data will be imported back)
+ if (GETPOST("nobin_disable_fk")) fwrite($handle, "ALTER TABLE `".$table."` DISABLE KEYS;\n");
+
+ $sql='SELECT * FROM '.$table;
+ $result = $db->query($sql);
+ $num_fields = $db->num_rows($result);
+ while($row = $db->fetch_row($result))
+ {
+ // For each row of data we print a line of INSERT
+ fwrite($handle,'INSERT '.$delayed.$ignore.'INTO `'.$table.'` VALUES (');
+ $columns = count($row);
+ for($j=0; $j<$columns; $j++) {
+ // Processing each columns of the row to ensure that we correctly save the value (eg: add quotes for string - in fact we add quotes for everything, it's easier)
+ if ($row[$j] == null and !is_string($row[$j])) {
+ // IMPORTANT: if the field is NULL we set it NULL
+ $row[$j] = 'NULL';
+ } elseif(is_string($row[$j]) and $row[$j] == '') {
+ // if it's an empty string, we set it as an empty string
+ $row[$j] = "''";
+ } elseif(is_numeric($row[$j]) and !strcmp($row[$j], $row[$j]+0) ) { // test if it's a numeric type and the numeric version ($nb+0) == string version (eg: if we have 01, it's probably not a number but rather a string, else it would not have any leading 0)
+ // if it's a number, we return it as-is
+ $row[$j] = $row[$j];
+ } else { // else for all other cases we escape the value and put quotes around
+ $row[$j] = addslashes($row[$j]);
+ $row[$j] = preg_replace("#\n#", "\\n", $row[$j]);
+ $row[$j] = "'".$row[$j]."'";
+ }
+ }
+ fwrite($handle,implode(',', $row).");\n");
+ }
+ if (GETPOST("nobin_disable_fk")) fwrite($handle, "ALTER TABLE `".$table."` ENABLE KEYS;\n"); // Enabling back the keys/index checking
+ if (!GETPOST("nobin_nolocks")) fwrite($handle, "UNLOCK TABLES;\n"); // Unlocking the table
+ fwrite($handle,"\n\n\n");
+ }
+ }
+
/* Backup Procedure structure*/
/*
$result = $db->query('SHOW PROCEDURE STATUS');
diff --git a/htdocs/comm/action/fiche.php b/htdocs/comm/action/fiche.php
index 972cee73a76..2ed00894aa0 100644
--- a/htdocs/comm/action/fiche.php
+++ b/htdocs/comm/action/fiche.php
@@ -538,7 +538,7 @@ if ($action == 'create')
// Busy
print '
';
diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php
index 11367289e7a..734cdd8eb83 100644
--- a/htdocs/compta/bank/graph.php
+++ b/htdocs/compta/bank/graph.php
@@ -41,7 +41,7 @@ if (isset($_GET["account"]) || isset($_GET["ref"]))
}
$fieldid = isset($_GET["ref"])?'ref':'rowid';
if ($user->societe_id) $socid=$user->societe_id;
-$result=restrictedArea($user,'banque',$id,'bank_account','','',$fieldid);
+$result=restrictedArea($user,'banque',$id,'bank_account&bank_account','','',$fieldid);
$account=$_GET["account"];
$mode='standard';
diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php
index af7078421a2..ffbf6be1ce9 100644
--- a/htdocs/compta/bank/treso.php
+++ b/htdocs/compta/bank/treso.php
@@ -42,7 +42,7 @@ if (isset($_GET["account"]) || isset($_GET["ref"]))
}
$fieldid = isset($_GET["ref"])?'ref':'rowid';
if ($user->societe_id) $socid=$user->societe_id;
-$result=restrictedArea($user,'banque',$id,'bank_account','','',$fieldid);
+$result=restrictedArea($user,'banque',$id,'bank_account&bank_account','','',$fieldid);
$vline=isset($_GET["vline"])?$_GET["vline"]:$_POST["vline"];
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 937db3e4cd9..3bb5532accf 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -52,6 +52,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
$langs->load('bills');
$langs->load('companies');
+$langs->load('compta');
$langs->load('products');
$langs->load('banks');
$langs->load('main');
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index d446e1ca826..44e4ce5032e 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -1270,6 +1270,16 @@ class Facture extends CommonInvoice
}
// Fin appel triggers
}
+
+ // Removed extrafields
+ if (! $error) {
+ $result=$this->deleteExtraFields();
+ if ($result < 0)
+ {
+ $error++;
+ dol_syslog(get_class($this)."::delete error deleteExtraFields ".$this->error, LOG_ERR);
+ }
+ }
if (! $error)
{
diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php
index 1d122a6c6f1..7cc37e380f5 100644
--- a/htdocs/core/class/conf.class.php
+++ b/htdocs/core/class/conf.class.php
@@ -200,12 +200,12 @@ class Conf
}
//var_dump($this->modules);
//var_dump($this->modules_parts['theme']);
-
+
// If you can't set timezone of your PHP, set this constant. Better is to set it to UTC.
// In future, this constant will be forced to 'UTC' so PHP server timezone will not have effect anymore.
//$this->global->MAIN_SERVER_TZ='Europe/Paris';
if (! empty($this->global->MAIN_SERVER_TZ) && $this->global->MAIN_SERVER_TZ != 'auto') date_default_timezone_set($this->global->MAIN_SERVER_TZ);
-
+
// Object $mc
if (! defined('NOREQUIREMC') && ! empty($this->multicompany->enabled))
{
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 4b9f8c4cda0..9583414b6dc 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -2964,16 +2964,17 @@ class Form
}
/**
- * Show a form to select a date
+ * Show a form + html select a date
*
* @param string $page Page
* @param string $selected Date preselected
- * @param string $htmlname Name of input html field
+ * @param string $htmlname Html name of date input fields or 'none'
* @param int $displayhour Display hour selector
* @param int $displaymin Display minutes selector
* @return void
+ * @see select_date
*/
- function form_date($page, $selected, $htmlname,$displayhour=0,$displaymin=0)
+ function form_date($page, $selected, $htmlname, $displayhour=0, $displaymin=0)
{
global $langs;
@@ -3486,13 +3487,13 @@ class Form
/**
- * Show a HTML widget to input a date or combo list for day, month, years and optionaly hours and minutes
+ * Show a HTML widget to input a date or combo list for day, month, years and optionaly hours and minutes.
* Fields are preselected with :
- * - set_time date (Local PHP server timestamps or date format YYYY-MM-DD or YYYY-MM-DD HH:MM)
- * - local date of PHP server if set_time is ''
- * - Empty (fields empty) if set_time is -1 (in this case, parameter empty must also have value 1)
+ * - set_time date (must be a local PHP server timestamp or string date with format 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM')
+ * - local date in user area, if set_time is '' (so if set_time is '', output may differs when done from two different location)
+ * - Empty (fields empty), if set_time is -1 (in this case, parameter empty must also have value 1)
*
- * @param timestamp $set_time Pre-selected date (must be a local PHP server timestamp)
+ * @param timestamp $set_time Pre-selected date (must be a local PHP server timestamp), -1 to keep date not preselected, '' to use current date.
* @param string $prefix Prefix for fields name
* @param int $h 1=Show also hours
* @param int $m 1=Show also minutes
@@ -3504,6 +3505,7 @@ class Form
* @param int $disabled Disable input fields
* @param int $fullday When a checkbox with this html name is on, hour and day are set with 00:00 or 23:59
* @return mixed Nothing or string if nooutput is 1
+ * @see form_date
*/
function select_date($set_time='', $prefix='re', $h=0, $m=0, $empty=0, $form_name="", $d=1, $addnowbutton=0, $nooutput=0, $disabled=0, $fullday='')
{
@@ -3516,7 +3518,11 @@ class Form
if($m == '') $m=0;
if($empty == '') $empty=0;
- if (! $set_time && $empty == 0) $set_time = dol_now('tzuser');
+ if ($set_time === '' && $empty == 0)
+ {
+ include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
+ $set_time = dol_now('tzuser')-(getServerTimeZoneInt('now')*3600); // set_time must be relative to PHP server timezone
+ }
// Analysis of the pre-selection date
if (preg_match('/^([0-9]+)\-([0-9]+)\-([0-9]+)\s?([0-9]+)?:?([0-9]+)?/',$set_time,$reg))
diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php
index aa0a422d91f..1c2af669bf9 100644
--- a/htdocs/core/lib/company.lib.php
+++ b/htdocs/core/lib/company.lib.php
@@ -721,7 +721,15 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='')
if (!empty($obj->town)) $coords .= $obj->town;
if (!empty($obj->country_id)) $coords .= " ".$country_code['label'];
}
- print '';
+ else if (!empty($object->address))
+ {
+ $coords .= dol_nl2br($object->address,1,true)." ";
+ if (!empty($object->zip)) $coords .= $object->zip.' ';
+ if (!empty($object->town)) $coords .= $object->town;
+ if (!empty($object->country_id)) $coords .= " ".$country_code['label'];
+ }
+ // hideonsmatphone because copyToClipboard call jquery dialog that does not work with jmobile
+ print '';
print img_picto($langs->trans("Address"), 'object_address.png');
print '';
}
@@ -733,7 +741,7 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='')
print '
+
we return GMT timestamp,
* 'tzserver' => we add the PHP server timezone
@@ -1073,7 +1073,7 @@ function dol_mktime($hour,$minute,$second,$month,$day,$year,$gm=false,$check=1)
*/
function dol_now($mode='gmt')
{
- // Note that gmmktime and mktime return same value (GMT) whithout parameters
+ // Note that gmmktime and mktime return same value (GMT) when used without parameters
//if ($mode == 'gmt') $ret=gmmktime(); // Strict Standards: gmmktime(): You should be using the time() function instead
if ($mode == 'gmt') $ret=time(); // Time for now at greenwich.
else if ($mode == 'tzserver') // Time for now with PHP server timezone added
@@ -1088,7 +1088,7 @@ function dol_now($mode='gmt')
$tzsecond=getParentCompanyTimeZoneInt(); // Contains tz+dayling saving time
$ret=dol_now('gmt')+($tzsecond*3600);
}*/
- else if ($mode == 'tzuser') // Time for now with user timezone is added
+ else if ($mode == 'tzuser') // Time for now with user timezone added
{
//print 'eeee'.time().'-'.mktime().'-'.gmmktime();
$offsettz=(empty($_SESSION['dol_tz'])?0:$_SESSION['dol_tz'])*60*60;
diff --git a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
index 296f509fd7e..ddc2b80f233 100644
--- a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
+++ b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
@@ -222,7 +222,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
if (! is_dir($tmpdir)) $texttitle.=img_warning($langs->trans("ErrorDirNotFound",$tmpdir),0);
else
{
- $tmpfiles=dol_dir_list($tmpdir,'files',0,'\.odt');
+ $tmpfiles=dol_dir_list($tmpdir,'files',0,'\.(ods|odt)');
if (count($tmpfiles)) $listoffiles=array_merge($listoffiles,$tmpfiles);
}
}
@@ -232,34 +232,24 @@ class doc_generic_order_odt extends ModelePDFCommandes
$texthelp.=$langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it
$texte.= $form->textwithpicto($texttitle,$texthelp,1,'help','',1);
- $texte.= '
";
diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php
index 4d30aca90fa..66faa6bcab4 100644
--- a/htdocs/fourn/commande/fiche.php
+++ b/htdocs/fourn/commande/fiche.php
@@ -233,7 +233,7 @@ else if ($action == 'addline' && $user->rights->fournisseur->commande->creer)
// Ecrase $pu par celui du produit
// Ecrase $desc par celui du produit
// Ecrase $txtva par celui du produit
- if ((GETPOST('addline_predefined') || GETPOST('idprodfournprice')) && ( GETPOST('pu')!=='')) // With combolist idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or ''
+ if (GETPOST('addline_predefined') || GETPOST('idprodfournprice')) // With combolist idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or ''
{
$idprod=0;
$productsupplier = new ProductFournisseur($db);
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index e06f937d74a..4c80956f84c 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -1439,7 +1439,7 @@ AccountancyCodeBuy=Purchase account. code
AgendaSetup=Events and agenda module setup
PasswordTogetVCalExport=Key to authorize export link
PastDelayVCalExport=Do not export event older than
-AGENDA_USE_EVENT_TYPE=Use events types (managed into Configuration->Dictionary->llx_c_actioncomm)
+AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionnary -> Type of agenda events)
##### ClickToDial #####
ClickToDialDesc=This module allows to add an icon after phone numbers. A click on this icon will call a server with a particular URL you define below. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
##### Point Of Sales (CashDesk) #####
diff --git a/htdocs/margin/agentMargins.php b/htdocs/margin/agentMargins.php
index cc8f4d067eb..74b82cbcb3b 100644
--- a/htdocs/margin/agentMargins.php
+++ b/htdocs/margin/agentMargins.php
@@ -105,7 +105,8 @@ print '
';
print "";
print '';
-$sql = "SELECT s.rowid as socid, s.nom, s.code_client, s.client, ";
+$sql = "SELECT";
+if ($agentid > 0) $sql.= " s.rowid as socid, s.nom, s.code_client, s.client,";
$sql.= " u.rowid as agent, u.login, u.lastname, u.firstname,";
$sql.= " sum(d.total_ht) as selling_price,";
$sql.= " sum(".$db->ifsql('d.total_ht <=0','d.qty * d.buy_price_ht * -1','d.qty * d.buy_price_ht').") as buying_price,";
@@ -137,9 +138,9 @@ if (!empty($enddate))
$sql.= " AND f.datef <= '".$db->idate($enddate)."'";
$sql .= " AND d.buy_price_ht IS NOT NULL";
if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1) $sql .= " AND d.buy_price_ht <> 0";
-if($agentid) $sql.= " GROUP BY s.rowid, s.nom, s.code_client, s.client, u.rowid, u.login, u.lastname, u.firstname";
+if ($agentid > 0) $sql.= " GROUP BY s.rowid, s.nom, s.code_client, s.client, u.rowid, u.login, u.lastname, u.firstname";
else $sql.= " GROUP BY u.rowid, u.login, u.lastname, u.firstname";
-$sql.= " ORDER BY ".$sortfield." ".$sortorder;
+$sql.=$db->order($sortfield,$sortorder);
// TODO: calculate total to display then restore pagination
//$sql.= $db->plimit($conf->liste_limit +1, $offset);
diff --git a/htdocs/margin/customerMargins.php b/htdocs/margin/customerMargins.php
index e5226040794..6675753d4d6 100644
--- a/htdocs/margin/customerMargins.php
+++ b/htdocs/margin/customerMargins.php
@@ -160,9 +160,9 @@ if (! empty($conf->global->DISPLAY_MARK_RATES)) {
print "";
print '';
-$sql = "SELECT s.rowid as socid, s.nom, s.code_client, s.client,";
-$sql.= " f.rowid as facid, f.facnumber, f.total as total_ht,";
-$sql.= " f.datef, f.paye, f.fk_statut as statut,";
+$sql = "SELECT";
+$sql.= " s.rowid as socid, s.nom, s.code_client, s.client,";
+if ($client) $sql.= " f.rowid as facid, f.facnumber, f.total as total_ht, f.datef, f.paye, f.fk_statut as statut,";
$sql.= " sum(d.total_ht) as selling_price,";
$sql.= " sum(".$db->ifsql('d.total_ht <=0','d.qty * d.buy_price_ht * -1','d.qty * d.buy_price_ht').") as buying_price,";
$sql.= " sum(".$db->ifsql('d.total_ht <=0','-1 * (abs(d.total_ht) - (d.buy_price_ht * d.qty))','d.total_ht - (d.buy_price_ht * d.qty)').") as marge";
@@ -184,7 +184,7 @@ if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPr
$sql .= " AND d.buy_price_ht <> 0";
if ($client) $sql.= " GROUP BY s.rowid, s.nom, s.code_client, s.client, f.rowid, f.facnumber, f.total, f.datef, f.paye, f.fk_statut";
else $sql.= " GROUP BY s.rowid, s.nom, s.code_client, s.client";
-$sql.= " ORDER BY $sortfield $sortorder ";
+$sql.=$db->order($sortfield,$sortorder);
// TODO: calculate total to display then restore pagination
//$sql.= $db->plimit($conf->liste_limit +1, $offset);
diff --git a/htdocs/margin/productMargins.php b/htdocs/margin/productMargins.php
index 3152b8387b6..ca7b2c4845b 100644
--- a/htdocs/margin/productMargins.php
+++ b/htdocs/margin/productMargins.php
@@ -164,9 +164,8 @@ print "";
print '';
$sql = "SELECT p.label, p.rowid, p.fk_product_type, p.ref,";
-$sql.= " d.fk_product,";
-$sql.= " f.rowid as facid, f.facnumber, f.total as total_ht,";
-$sql.= " f.datef, f.paye, f.fk_statut as statut,";
+if ($id > 0) $sql.= " d.fk_product,";
+if ($id > 0) $sql.= " f.rowid as facid, f.facnumber, f.total as total_ht, f.datef, f.paye, f.fk_statut as statut,";
$sql.= " sum(d.total_ht) as selling_price,";
$sql.= " sum(".$db->ifsql('d.total_ht <=0','d.qty * d.buy_price_ht * -1','d.qty * d.buy_price_ht').") as buying_price,";
$sql.= " sum(".$db->ifsql('d.total_ht <=0','-1 * (abs(d.total_ht) - (d.buy_price_ht * d.qty))','d.total_ht - (d.buy_price_ht * d.qty)').") as marge";
@@ -188,11 +187,9 @@ if (!empty($enddate))
$sql .= " AND d.buy_price_ht IS NOT NULL";
if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1)
$sql .= " AND d.buy_price_ht <> 0";
-if ($id > 0)
- $sql.= " GROUP BY p.label, p.rowid, p.fk_product_type, p.ref, d.fk_product, f.rowid, f.facnumber, f.total, f.datef, f.paye, f.fk_statut";
-else
- $sql.= " GROUP BY p.label, p.rowid, p.fk_product_type, p.ref";
-$sql.= " ORDER BY ".$sortfield." ".$sortorder;
+if ($id > 0) $sql.= " GROUP BY p.label, p.rowid, p.fk_product_type, p.ref, d.fk_product, f.rowid, f.facnumber, f.total, f.datef, f.paye, f.fk_statut";
+else $sql.= " GROUP BY p.label, p.rowid, p.fk_product_type, p.ref";
+$sql.=$db->order($sortfield,$sortorder);
// TODO: calculate total to display then restore pagination
//$sql.= $db->plimit($conf->liste_limit +1, $offset);
diff --git a/htdocs/public/test/test_arrays.php b/htdocs/public/test/test_arrays.php
index fb8274e5524..f7e29a695a1 100644
--- a/htdocs/public/test/test_arrays.php
+++ b/htdocs/public/test/test_arrays.php
@@ -131,11 +131,8 @@ Example 1 : Table using tags: div.tagtable+div.tagtr+div or div.tagtable+div.tag
Example 2 : Table using tags: table/thead/tbody/tr/td + dataTable
-