From aafc5e95fc2a18c38489c8cd212bb430fcd95d9d Mon Sep 17 00:00:00 2001 From: Gemini CLI Date: Sat, 16 May 2026 16:20:35 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Artikel-Sortierung,=20Lagerort-Filter=20?= =?UTF-8?q?Logik=20und=20QR-Code=20Druckgr=C3=B6=C3=9Fe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/articles.php | 67 +++++++++++++++++++++++++++++---------- src/storage_locations.php | 23 ++++++++++++-- 2 files changed, 71 insertions(+), 19 deletions(-) diff --git a/src/articles.php b/src/articles.php index a8cf2bf..f5d0fd1 100644 --- a/src/articles.php +++ b/src/articles.php @@ -226,13 +226,13 @@ $conn->close(); Bild - Name - Hersteller - Modell/Typ - Gewicht - Anzahl - Kategorie - Lagerort + Name + Hersteller + Modell/Typ + Gewicht + Anzahl + Kategorie + Lagerort Besitzer Status Aktionen @@ -441,18 +441,51 @@ document.addEventListener('DOMContentLoaded', function () { }); document.getElementById('export_ids_input').value = exportIds.join(','); + const isGrouped = (currentSortColumn === 'category_name'); const groupedArticles = {}; - filteredList.forEach(article => { - const catName = article.category_name || 'Ohne Kategorie'; - if (!groupedArticles[catName]) groupedArticles[catName] = []; - groupedArticles[catName].push(article); - }); + let sortedCategories = []; - const sortedCategories = Object.keys(groupedArticles).sort((a, b) => { - if (a === 'Ohne Kategorie') return 1; - if (b === 'Ohne Kategorie') return -1; - return a.localeCompare(b); - }); + if (isGrouped) { + filteredList.forEach(article => { + const catName = article.category_name || 'Ohne Kategorie'; + if (!groupedArticles[catName]) groupedArticles[catName] = []; + groupedArticles[catName].push(article); + }); + sortedCategories = Object.keys(groupedArticles).sort((a, b) => { + let cmp = 0; + if (a === 'Ohne Kategorie') cmp = 1; + else if (b === 'Ohne Kategorie') cmp = -1; + else cmp = a.localeCompare(b); + return currentSortDirection === 'asc' ? cmp : -cmp; + }); + // Sort items inside groups by name + Object.keys(groupedArticles).forEach(key => { + groupedArticles[key].sort((a, b) => a.name.localeCompare(b.name)); + }); + } else { + groupedArticles['Suchergebnisse'] = [...filteredList]; + groupedArticles['Suchergebnisse'].sort((a, b) => { + let valA = a[currentSortColumn] || ''; + let valB = b[currentSortColumn] || ''; + + if (currentSortColumn === 'weight_grams' || currentSortColumn === 'quantity_owned') { + valA = parseFloat(valA) || 0; + valB = parseFloat(valB) || 0; + return currentSortDirection === 'asc' ? valA - valB : valB - valA; + } else if (currentSortColumn === 'location_level1_name') { + valA = (a.location_level1_name || '') + (a.location_level2_name || ''); + valB = (b.location_level1_name || '') + (b.location_level2_name || ''); + } else { + valA = valA.toString().toLowerCase(); + valB = valB.toString().toLowerCase(); + } + + if (valA < valB) return currentSortDirection === 'asc' ? -1 : 1; + if (valA > valB) return currentSortDirection === 'asc' ? 1 : -1; + return 0; + }); + sortedCategories = ['Suchergebnisse']; + } let tableHTML = ''; let gridHTML = ''; diff --git a/src/storage_locations.php b/src/storage_locations.php index 6ea65b6..406746b 100644 --- a/src/storage_locations.php +++ b/src/storage_locations.php @@ -349,7 +349,15 @@ function showAllBarcodes(jsonStr, level1Name) { function printDiv(divId) { var printContents = document.getElementById(divId).innerHTML; var originalContents = document.body.innerHTML; - document.body.innerHTML = "QR-Codes drucken" + printContents + ""; + document.body.innerHTML = ` + + + `; window.print(); document.body.innerHTML = originalContents; window.location.reload(); // Reload to restore event listeners after print @@ -366,7 +374,7 @@ function printDiv(divId) { @@ -408,3 +416,14 @@ function printDiv(divId) { +?php require_once 'footer.php'; ?> + QR Code +
+ Link manuell testen +
+ + + + + +