slight adjustments

This commit is contained in:
2026-06-28 23:47:58 +02:00
parent 73cf63a56d
commit 0efc01a835
+37 -59
View File
@@ -1192,56 +1192,51 @@
} }
}); });
function openEditLibraryItem(itemId) { window.openEditLibraryItem = function(itemId) {
const item = libraryItems.find(i => i._id === itemId); const item = libraryItems.find(i => i._id === itemId);
if (!item) return;
if (!item) {
alert('Fehler: Das Medium konnte nicht gefunden werden.');
return;
}
// 1. Felder befüllen // 1. Felder befüllen
document.getElementById('editLibraryItemId').value = item._id || ''; document.getElementById('editLibraryItemId').value = item._id;
document.getElementById('editLibraryName').value = item.Name || ''; document.getElementById('editLibraryName').value = item.Name;
document.getElementById('editLibraryType').value = item.ItemType || 'book'; document.getElementById('editLibraryType').value = item.ItemType;
document.getElementById('editLibraryIsbn').value = item.ISBN || ''; document.getElementById('editLibraryIsbn').value = item.ISBN || '';
document.getElementById('editLibraryCode4').value = item.Code_4 || item.Code4 || ''; document.getElementById('editLibraryCode4').value = item.Code_4 || '';
document.getElementById('editLibraryLocation').value = item.Ort || ''; document.getElementById('editLibraryLocation').value = item.Ort;
document.getElementById('editLibraryDescription').value = item.Beschreibung || ''; document.getElementById('editLibraryDescription').value = item.Beschreibung;
// 2. Gruppen-Logik (Codes anzeigen) // 2. Gruppen-Logik
const warningDiv = document.getElementById('editLibraryGroupWarning'); const warningDiv = document.getElementById('editLibraryGroupWarning');
const codesContainer = document.getElementById('editLibraryAllCodes'); const codesContainer = document.getElementById('editLibraryAllCodes');
if (item.SeriesGroupId) { if (item.SeriesGroupId) {
// DEBUG: Schau in der Konsole, wie viele Items gefunden werden // Filtern aus dem aktuell geladenen Array
console.log("Suche Items mit SeriesGroupId:", item.SeriesGroupId); let groupMembers = libraryItems.filter(i => i.SeriesGroupId === item.SeriesGroupId);
const groupMembers = libraryItems.filter(i => { // SCHLÜSSEL: Wenn die Anzahl der gefundenen Elemente nicht mit SeriesCount übereinstimmt,
// Debug: Prüfen, ob die IDs matchen // haben wir die Gruppe noch nicht vollständig geladen.
const match = i.SeriesGroupId === item.SeriesGroupId; if (groupMembers.length < (item.SeriesCount || 0)) {
if(match) console.log("Gefundenes Item:", i.Code_4); console.warn("Gruppe noch nicht vollständig geladen. Anzeige ggf. unvollständig.");
return match; // Optional: Zeige einen Ladehinweis im Modal
}); codesContainer.textContent = "Lade restliche Gruppenmitglieder...";
} else {
console.log("Anzahl gefundener Gruppenmitglieder:", groupMembers.length); // Daten sind vollständig -> Anzeigen
// Sortierung und Extraktion
const codeList = groupMembers const codeList = groupMembers
.sort((a, b) => (a.SeriesPosition || 0) - (b.SeriesPosition || 0)) .sort((a, b) => (a.SeriesPosition || 0) - (b.SeriesPosition || 0))
.map(member => member.Code_4 || "---") .map(m => m.Code_4 || "---")
.join(', '); .join(', ');
document.getElementById('editLibraryGroupCount').textContent = groupMembers.length; codesContainer.textContent = codeList;
document.getElementById('editLibraryAllCodes').textContent = codeList; }
document.getElementById('editLibraryGroupCount').textContent = groupMembers.length + " / " + (item.SeriesCount || "?");
warningDiv.style.display = 'block'; warningDiv.style.display = 'block';
} else { } else {
warningDiv.style.display = 'none'; warningDiv.style.display = 'none';
} }
document.getElementById('editLibraryModal').style.display = 'flex'; document.getElementById('editLibraryModal').style.display = 'flex';
} };
function closeEditLibraryModal() { function closeEditLibraryModal() {
document.getElementById('editLibraryModal').style.display = 'none'; document.getElementById('editLibraryModal').style.display = 'none';
@@ -1252,7 +1247,6 @@
*/ */
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
const editForm = document.getElementById('editLibraryForm'); const editForm = document.getElementById('editLibraryForm');
if (editForm) { if (editForm) {
editForm.addEventListener('submit', async function(e) { editForm.addEventListener('submit', async function(e) {
e.preventDefault(); e.preventDefault();
@@ -1262,17 +1256,15 @@
if (!currentItem) return; if (!currentItem) return;
// 1. Payload für die /update_group Route zusammenstellen // 1. Alle Mitglieder der Gruppe finden, um die Code-Liste aufzubauen
// Wir sammeln alle Gruppenmitglieder, um die individuellen Codes zu senden
const groupMembers = libraryItems.filter(i => i.SeriesGroupId === currentItem.SeriesGroupId); const groupMembers = libraryItems.filter(i => i.SeriesGroupId === currentItem.SeriesGroupId);
const individualItems = groupMembers.map(member => { const individualUpdates = groupMembers.map(member => ({
return {
id: member._id, id: member._id,
// Wenn es das aktive Item ist, nimm den neuen Wert aus dem Input // Wenn dies das bearbeitete Item ist, nimm den neuen Code, sonst den alten
code_4: (member._id === itemId) ? document.getElementById('editLibraryCode4').value : member.Code_4 code_4: (member._id === itemId) ? document.getElementById('editLibraryCode4').value : member.Code_4
}; }));
});
// 2. Payload für das Backend bauen
const payload = { const payload = {
series_group_id: currentItem.SeriesGroupId, series_group_id: currentItem.SeriesGroupId,
name: document.getElementById('editLibraryName').value, name: document.getElementById('editLibraryName').value,
@@ -1280,10 +1272,10 @@
beschreibung: document.getElementById('editLibraryDescription').value, beschreibung: document.getElementById('editLibraryDescription').value,
isbn: document.getElementById('editLibraryIsbn').value, isbn: document.getElementById('editLibraryIsbn').value,
item_type: document.getElementById('editLibraryType').value, item_type: document.getElementById('editLibraryType').value,
items: individualItems items: individualUpdates
}; };
// 2. Request an Backend // 3. Request an die Gruppen-Update Route
try { try {
const response = await fetch('/update_group', { const response = await fetch('/update_group', {
method: 'POST', method: 'POST',
@@ -1292,34 +1284,20 @@
}); });
const result = await response.json(); const result = await response.json();
if (result.success) { if (result.success) {
// 3. UI-Synchronisierung (lokal im Browser) alert('Gruppe erfolgreich synchronisiert!');
libraryItems.forEach(item => {
if (item.SeriesGroupId === currentItem.SeriesGroupId) {
item.Name = payload.name;
item.Ort = payload.ort;
item.Beschreibung = payload.beschreibung;
item.ISBN = payload.isbn;
item.ItemType = payload.item_type;
// Nur den Code des aktiven Items lokal updaten
if (item._id === itemId) item.Code_4 = document.getElementById('editLibraryCode4').value;
}
});
closeEditLibraryModal(); closeEditLibraryModal();
// Falls du eine Funktion zum Neuzeichnen der Tabelle hast, rufe sie hier auf: await loadLibraryItems(); // Daten neu laden
// renderTable(); // renderTable(); // Ggf. Tabelle neu rendern
alert("Erfolgreich synchronisiert.");
} else { } else {
alert('Fehler: ' + result.message); alert('Fehler: ' + result.message);
} }
} catch (error) { } catch (error) {
console.error('Fetch error:', error); console.error('Update failed:', error);
alert('Netzwerkfehler beim Speichern.'); alert('Netzwerkfehler.');
} }
}); });
} }
}); });
</script> </script>