diff --git a/ChangeLog b/ChangeLog
index 32593e6ce77..abc660739cf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -18,6 +18,79 @@ Following changes may create regressions for some external modules, but were nec
+***** ChangeLog for 11.0.1 compared to 11.0.0 *****
+FIX: advanced target emailing sql and ergonomy.
+FIX: After import of a website template, home page was not set.
+FIX: Avoid deletion of bank record if in accounting
+FIX: compatibility with multicompany (avoid duplicate data)
+FIX: Confusion between 'bank reconciled' and 'accounted'. Show both data.
+FIX: Count of Stripe payment mode must take test/live into account
+FIX: Creation of Stripe card from backoffice must return a clean message
+FIX: CVE-2019–17223
+FIX: CVE-2019–17223
+FIX: CVE-2020-7994
+FIX: CVE Need permission to be able to develop modules
+FIX: #13053
+FIX: Disable ticket status change if ticket closed
+FIX: doc of dictionnary API
+FIX: expedition ceate line new parameter is not required.
+FIX: export ledger
+FIX: FEC export have specific name
+FIX: Filenames must not contains non ascii char or we will get non ascii
+FIX: Filter on list of events were lost after "Back to list"
+FIX: hasDelay for retained warranty
+FIX: If we can change vendor status, we must be able to chane vendor code
+FIX: links in products/services index
+FIX: Log of authentication ok or ko + CVE-2020-7996
+FIX: Look and feel v11
+FIX: Mail smtps truncated if content has a line with single .
+FIX: missing hook parameter
+FIX: Missing include
+FIX: need weight short label in shipping doc
+FIX: Picture of contact not visible in tooltip
+FIX: Problem with column label in subscription list
+FIX: ref_client not visible in tooltip.
+FIX: search filter on extrafields were not restored after "Back to list"
+FIX: situation invoice: allow excess paid to be converted to discount
+FIX: situation invoice: bad amount for previous payments because of local variable overwriting a more global one
+FIX: situation invoice: can't convert excess received to discount & bad previous payment amount
+FIX: SQL request and phpunit
+FIX: Update export_files.php
+FIX: Use ref into label of ticket message
+FIX: use "usergroup" instead of "user"
+FIX: Warning on admin/export_files
+FIX: #10203
+FIX: default filtering for 'select' extrafields should use "=", not "LIKE"
+FIX: #11975 When a product is split between multiple pages in a document, prices/quantity/etc appear on the last relevant page
+FIX: #12760 #12763 #12755 #12765 #12751
+FIX: #12874
+FIX: #12892
+FIX: #12908 User login with credentials from self-subscription form fails
+FIX: #12932
+FIX: #12966
+FIX: #12973
+FIX: #12974
+FIX: #12975
+FIX: #12978
+FIX: #12986
+FIX: #12991
+FIX: #12992
+FIX: #12995
+FIX: #13018 Extrafields Supplier invoice
+FIX: #13019
+FIX: #13022
+FIX: #13028
+FIX: #13038 ExpenseReport PDF - custom category description is not correct
+FIX: #13046 More complete
+FIX: #13048
+FIX: #13050
+FIX: #13077 Replace left join with inner join (left join was useless)
+FIX: #13085
+FIX: #13094
+FIX: #13096
+FIX: #13100
+
+
***** ChangeLog for 11.0.0 compared to 10.0.0 *****
For Users:
diff --git a/htdocs/accountancy/tpl/export_journal.tpl.php b/htdocs/accountancy/tpl/export_journal.tpl.php
index 4537c497ff6..31eb7c78846 100644
--- a/htdocs/accountancy/tpl/export_journal.tpl.php
+++ b/htdocs/accountancy/tpl/export_journal.tpl.php
@@ -57,7 +57,7 @@ if ($accountancyexport->getFormatCode($formatexportset) == $accountancyexport::$
$endaccountingperiod = dol_print_date(dol_get_last_day($tmparray['year'], $tmparray['mon']), 'dayxcard');
- $completefilename = $siren . "FEC" . $endaccountingperiod . "." . $format;
+ $completefilename = $siren . "FEC" . $endaccountingperiod . ".txt";
}
else
{
diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php
index f74ee2fac7d..abf526544ac 100644
--- a/htdocs/admin/mails.php
+++ b/htdocs/admin/mails.php
@@ -134,9 +134,8 @@ $head = email_admin_prepare_head();
// List of sending methods
$listofmethods = array();
$listofmethods['mail'] = 'PHP mail function';
-//$listofmethods['simplemail']='Simplemail class';
$listofmethods['smtps'] = 'SMTP/SMTPS socket library';
-$listofmethods['swiftmailer'] = 'Swift Mailer socket library';
+if (version_compare(phpversion(), '7.0', '>=')) $listofmethods['swiftmailer'] = 'Swift Mailer socket library';
if ($action == 'edit')
diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php
index b9fefe3d78b..4c8f81a7368 100644
--- a/htdocs/comm/propal/list.php
+++ b/htdocs/comm/propal/list.php
@@ -776,8 +776,9 @@ if ($resql)
$objectstatic->id = $obj->rowid;
$objectstatic->ref = $obj->ref;
- $objectstatic->note_private = $obj->note_private;
+ $objectstatic->ref_client = $obj->ref_client;
$objectstatic->note_public = $obj->note_public;
+ $objectstatic->note_private = $obj->note_private;
$companystatic->id = $obj->socid;
$companystatic->name = $obj->name;
@@ -824,7 +825,7 @@ if ($resql)
if (!empty($arrayfields['p.ref_client']['checked']))
{
// Customer ref
- print '
';
+ print ' | ';
print $obj->ref_client;
print ' | ';
if (!$i) $totalarray['nbfield']++;
diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php
index 0fa53f6c314..845bc4603cd 100644
--- a/htdocs/commande/list.php
+++ b/htdocs/commande/list.php
@@ -966,7 +966,7 @@ if ($resql)
// Ref customer
if (!empty($arrayfields['c.ref_client']['checked']))
{
- print ''.$obj->ref_client.' | ';
+ print ''.$obj->ref_client.' | ';
if (!$i) $totalarray['nbfield']++;
}
diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php
index 3e59b92a146..24567451840 100644
--- a/htdocs/compta/facture/card.php
+++ b/htdocs/compta/facture/card.php
@@ -793,7 +793,7 @@ if (empty($reshook))
$canconvert = 0;
if ($object->type == Facture::TYPE_DEPOSIT && empty($discountcheck->id)) $canconvert = 1; // we can convert deposit into discount if deposit is payed (completely, partially or not at all) and not already converted (see real condition into condition used to show button converttoreduc)
- if (($object->type == Facture::TYPE_CREDIT_NOTE || $object->type == Facture::TYPE_STANDARD) && $object->paye == 0 && empty($discountcheck->id)) $canconvert = 1; // we can convert credit note into discount if credit note is not payed back and not already converted and amount of payment is 0 (see real condition into condition used to show button converttoreduc)
+ if (($object->type == Facture::TYPE_CREDIT_NOTE || $object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_SITUATION) && $object->paye == 0 && empty($discountcheck->id)) $canconvert = 1; // we can convert credit note into discount if credit note is not payed back and not already converted and amount of payment is 0 (see real condition into condition used to show button converttoreduc)
if ($canconvert)
{
$db->begin();
@@ -3640,7 +3640,7 @@ elseif ($id > 0 || !empty($ref))
// Confirmation de la conversion de l'avoir en reduc
if ($action == 'converttoreduc') {
- if ($object->type == Facture::TYPE_STANDARD) $type_fac = 'ExcessReceived';
+ if ($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_SITUATION) $type_fac = 'ExcessReceived';
elseif ($object->type == Facture::TYPE_CREDIT_NOTE) $type_fac = 'CreditNote';
elseif ($object->type == Facture::TYPE_DEPOSIT) $type_fac = 'Deposit';
$text = $langs->trans('ConfirmConvertToReduc', strtolower($langs->transnoentities($type_fac)));
@@ -4517,7 +4517,7 @@ elseif ($id > 0 || !empty($ref))
$current_situation_counter = array();
foreach ($object->tab_previous_situation_invoice as $prev_invoice) {
- $totalpaye = $prev_invoice->getSommePaiement();
+ $totalpaye_prev = $prev_invoice->getSommePaiement();
$total_prev_ht += $prev_invoice->total_ht;
$total_prev_ttc += $prev_invoice->total_ttc;
$current_situation_counter[] = (($prev_invoice->type == Facture::TYPE_CREDIT_NOTE) ?-1 : 1) * $prev_invoice->situation_counter;
@@ -4528,7 +4528,7 @@ elseif ($id > 0 || !empty($ref))
if (!empty($conf->banque->enabled)) print ' | ';
print ''.price($prev_invoice->total_ht).' | ';
print ''.price($prev_invoice->total_ttc).' | ';
- print ''.$prev_invoice->getLibStatut(3, $totalpaye).' | ';
+ print ''.$prev_invoice->getLibStatut(3, $totalpaye_prev).' | ';
print '';
}
}
@@ -5093,7 +5093,7 @@ elseif ($id > 0 || !empty($ref))
}
// Reverse back money or convert to reduction
- if ($object->type == Facture::TYPE_CREDIT_NOTE || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_STANDARD) {
+ if ($object->type == Facture::TYPE_CREDIT_NOTE || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_SITUATION) {
// For credit note only
if ($object->type == Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $usercanissuepayment)
{
@@ -5108,7 +5108,7 @@ elseif ($id > 0 || !empty($ref))
}
// For standard invoice with excess received
- if ($object->type == Facture::TYPE_STANDARD && empty($object->paye) && ($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits) < 0 && $usercancreate && empty($discount->id))
+ if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_SITUATION) && empty($object->paye) && $resteapayer < 0 && $usercancreate && empty($discount->id))
{
print 'id.'&action=converttoreduc">'.$langs->trans('ConvertExcessReceivedToReduc').'';
}
diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php
index 32cd30ea207..b32d82a08cb 100644
--- a/htdocs/compta/facture/list.php
+++ b/htdocs/compta/facture/list.php
@@ -989,6 +989,7 @@ if ($resql)
$facturestatic->id = $obj->id;
$facturestatic->ref = $obj->ref;
+ $facturestatic->ref_client = $obj->ref_client;
$facturestatic->type = $obj->type;
$facturestatic->total_ht = $obj->total_ht;
$facturestatic->total_tva = $obj->total_vat;
@@ -1077,7 +1078,7 @@ if ($resql)
// Customer ref
if (!empty($arrayfields['f.ref_client']['checked']))
{
- print '';
+ print ' | ';
print $obj->ref_client;
print ' | ';
if (!$i) $totalarray['nbfield']++;
diff --git a/htdocs/compta/stats/cabyprodserv.php b/htdocs/compta/stats/cabyprodserv.php
index 138bff4a525..7093a3b7a2f 100644
--- a/htdocs/compta/stats/cabyprodserv.php
+++ b/htdocs/compta/stats/cabyprodserv.php
@@ -123,23 +123,25 @@ $year_end = $tmpe['year'];
$nbofyear = ($year_end - $year_start) + 1;
$commonparams=array();
-$commonparams['modecompta']=$modecompta;
-$commonparams['sortorder'] = $sortorder;
-$commonparams['sortfield'] = $sortfield;
+if (!empty($modecompta)) $commonparams['modecompta']=$modecompta;
+if (!empty($sortorder)) $commonparams['sortorder'] = $sortorder;
+if (!empty($sortfield)) $commonparams['sortfield'] = $sortfield;
$headerparams = array();
-$headerparams['date_startyear'] = $date_startyear;
-$headerparams['date_startmonth'] = $date_startmonth;
-$headerparams['date_startday'] = $date_startday;
-$headerparams['date_endyear'] = $date_endyear;
-$headerparams['date_endmonth'] = $date_endmonth;
-$headerparams['date_endday'] = $date_endday;
+if (!empty($date_startyear)) $headerparams['date_startyear'] = $date_startyear;
+if (!empty($date_startmonth)) $headerparams['date_startmonth'] = $date_startmonth;
+if (!empty($date_startday)) $headerparams['date_startday'] = $date_startday;
+if (!empty($date_endyear)) $headerparams['date_endyear'] = $date_endyear;
+if (!empty($date_endmonth)) $headerparams['date_endmonth'] = $date_endmonth;
+if (!empty($date_endday)) $headerparams['date_endday'] = $date_endday;
+if (!empty($year)) $headerparams['year'] = $year;
+if (!empty($month)) $headerparams['month'] = $month;
$headerparams['q'] = $q;
$tableparams = array();
-$tableparams['search_categ'] = $selected_cat;
-$tableparams['search_soc'] = $selected_soc;
-$tableparams['search_type'] = $selected_type;
+if (!empty($selected_cat)) $tableparams['search_categ'] = $selected_cat;
+if (!empty($selected_soc)) $tableparams['search_soc'] = $selected_soc;
+if (!empty($selected_type)) $tableparams['search_type'] = $selected_type;
$tableparams['subcat'] = ($subcat === true)?'yes':'';
// Adding common parameters
diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php
index 9b865cae3e6..6dc24c71b57 100644
--- a/htdocs/fourn/facture/list.php
+++ b/htdocs/fourn/facture/list.php
@@ -433,8 +433,8 @@ if ($resql)
}
$param = '&socid='.$socid;
- if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.$contextpage;
- if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit;
+ if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);
+ if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);
if ($search_all) $param .= '&search_all='.urlencode($search_all);
if ($day) $param .= '&day='.urlencode($day);
if ($month) $param .= '&month='.urlencode($month);
@@ -455,9 +455,9 @@ if ($resql)
if ($search_amount_no_tax) $param .= '&search_amount_no_tax='.urlencode($search_amount_no_tax);
if ($search_amount_all_tax) $param .= '&search_amount_all_tax='.urlencode($search_amount_all_tax);
if ($search_status >= 0) $param .= "&search_status=".urlencode($search_status);
- if ($show_files) $param .= '&show_files='.$show_files;
- if ($option) $param .= "&option=".$option;
- if ($optioncss != '') $param .= '&optioncss='.$optioncss;
+ if ($show_files) $param .= '&show_files='.urlencode($show_files);
+ if ($option) $param .= "&option=".urlencode($option);
+ if ($optioncss != '') $param .= '&optioncss='.urlencode($optioncss);
// Add $param from extra fields
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
@@ -879,7 +879,7 @@ if ($resql)
// Supplier ref
if (!empty($arrayfields['f.ref_supplier']['checked']))
{
- print '';
+ print ' | ';
print $obj->ref_supplier;
print ' | ';
if (!$i) $totalarray['nbfield']++;