diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index bbd8106729e..179288e36e5 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -13,7 +13,7 @@ * Copyright (C) 2015-2022 Ferran Marcet * Copyright (C) 2017 Josep LluĂ­s Amador * Copyright (C) 2018 Charlene Benke - * Copyright (C) 2019-2025 Alexandre Spangaro + * Copyright (C) 2019-2026 Alexandre Spangaro * Copyright (C) 2021-2024 Anthony Berton * Copyright (C) 2023 Nick Fragoulis * Copyright (C) 2023 Joachim Kueter @@ -120,7 +120,18 @@ $search_multicurrency_montant_ht = GETPOST('search_multicurrency_montant_ht', 'a $search_multicurrency_montant_vat = GETPOST('search_multicurrency_montant_vat', 'alpha'); $search_multicurrency_montant_ttc = GETPOST('search_multicurrency_montant_ttc', 'alpha'); $search_dispute_status = GETPOST('search_dispute_status', 'intcomma'); -$search_status = GETPOST('search_status', 'intcomma'); +$search_status = GETPOST('search_status', 'array:intcomma'); +if (empty($search_status) && GETPOSTISSET('search_status')) { + // The parameter exists in the URL but was not recognized as an array. + $search_status = GETPOST('search_status', 'intcomma'); + if ($search_status !== '' && $search_status !== '-1') { + $search_status = array($search_status); + } else { + $search_status = ''; + } +} elseif (is_array($search_status) && count($search_status) == 0) { + $search_status = ''; +} $search_paymentmode = GETPOST('search_paymentmode', 'intcomma'); $search_paymentterms = GETPOST('search_paymentterms', 'intcomma'); $search_bankaccount = GETPOST('search_bankaccount', 'intcomma'); @@ -954,23 +965,9 @@ if ($search_dispute_status != '-1' && $search_dispute_status != '') { $sql .= " AND f.dispute_status IN (".$db->sanitize($search_dispute_status).")"; } } -if ($search_status != '-1' && $search_status != '') { - if (is_numeric($search_status) && $search_status >= 0) { - if ($search_status == '0') { - $sql .= " AND f.fk_statut = 0"; // draft - } - if ($search_status == '1') { - $sql .= " AND f.fk_statut = 1"; // unpayed - } - if ($search_status == '2') { - $sql .= " AND f.fk_statut = 2"; // paid Not that some corrupted data may contains f.fk_statut = 1 AND f.paye = 1 (it means paid too but should not happen. If yes, reopen and reclassify billed) - } - if ($search_status == '3') { - $sql .= " AND f.fk_statut = 3"; // abandoned - } - } else { - $sql .= " AND f.fk_statut IN (".$db->sanitize($search_status).")"; // When search_status is '1,2' for example - } +if (is_array($search_status) && count($search_status) > 0) { + $search_statusArray = $search_status; + $sql .= " AND f.fk_statut IN (" . $db->sanitize(implode(',', array_map('intval', $search_statusArray))) . ")"; } if ($search_paymentmode > 0) { @@ -1416,7 +1413,13 @@ if ($search_dispute_status != '') { $param .= '&search_dispute_status='.urlencode($search_dispute_status); } if ($search_status != '') { - $param .= '&search_status='.urlencode($search_status); + if (is_array($search_status)) { + foreach ($search_status as $key => $val) { + $param .= '&search_status[]='.urlencode($val); + } + } else { + $param .= '&search_status='.urlencode($search_status); + } } if ($search_paymentmode > 0) { $param .= '&search_paymentmode='.urlencode((string) ($search_paymentmode)); @@ -1966,9 +1969,13 @@ if (!empty($arrayfields['f.dispute_status']['checked'])) { // Status if (!empty($arrayfields['f.fk_statut']['checked'])) { print ''; - $liststatus = array('0' => $langs->trans("BillShortStatusDraft"), '0,1' => $langs->trans("BillShortStatusDraft").'+'.$langs->trans("BillShortStatusNotPaid"), '1' => $langs->trans("BillShortStatusNotPaid"), '1,2' => $langs->trans("BillShortStatusNotPaid").'+'.$langs->trans("BillShortStatusPaid"), '2' => $langs->trans("BillShortStatusPaid"), '3' => $langs->trans("BillShortStatusCanceled")); + $liststatus = array( + '0' => $langs->trans("BillShortStatusDraft"), + '1' => $langs->trans("BillShortStatusNotPaid"), + '2' => $langs->trans("BillShortStatusPaid"), + '3' => $langs->trans("BillShortStatusCanceled")); // @phan-suppress-next-line PhanPluginSuspiciousParamOrder - print $form->selectarray('search_status', $liststatus, $search_status, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage', 1); + print $form->multiselectarray('search_status', $liststatus, (is_array($search_status) ? $search_status : array()), 0, 0, 'minwidth125', 1, 0); print ''; } // Action column