feat: Erweiterung der Drucker-API und Verbesserung der Benutzeroberfläche durch Status-Checks. Neue Drucker sind standardmäßig aktiv, und ein zusätzlicher Endpunkt zum Hinzufügen von Druckern wurde implementiert. Die Drucker-Templates wurden aktualisiert, um verfügbare Drucker mit Status-Indikatoren anzuzeigen und Fallback-Mechanismen bei Ladefehlern zu integrieren.

This commit is contained in:
2025-05-27 11:05:10 +02:00
parent b289501d00
commit c39595382c
4 changed files with 309 additions and 14 deletions

View File

@@ -253,23 +253,93 @@ function refreshJobs() {
// Laden der Drucker für das Dropdown
function loadPrinters() {
fetch('/api/printers')
// Lade Drucker mit Status-Check für bessere Verfügbarkeitsprüfung
fetch('/api/printers/status')
.then(response => response.json())
.then(data => {
const printerSelect = document.getElementById('printer_id');
printerSelect.innerHTML = '<option value="">Drucker auswählen...</option>';
// Nur aktive Drucker hinzufügen
data.printers.filter(printer => printer.active).forEach(printer => {
// Prüfe ob data ein Array ist (direkte Antwort) oder ein Objekt mit printers-Property
const printers = Array.isArray(data) ? data : (data.printers || []);
console.log('Geladene Drucker:', printers);
// Filtere verfügbare Drucker (status: 'available' oder active: true)
const availablePrinters = printers.filter(printer => {
return printer.status === 'available' || printer.active === true;
});
console.log('Verfügbare Drucker:', availablePrinters);
if (availablePrinters.length === 0) {
// Fallback: Lade alle Drucker ohne Status-Check
return fetch('/api/printers')
.then(response => response.json())
.then(fallbackData => {
const fallbackPrinters = fallbackData.printers || [];
console.log('Fallback Drucker:', fallbackPrinters);
if (fallbackPrinters.length === 0) {
printerSelect.innerHTML = '<option value="">Keine Drucker verfügbar</option>';
showNotification('Keine Drucker in der Datenbank gefunden', 'warning');
return;
}
// Zeige alle Drucker an, auch wenn Status unbekannt
fallbackPrinters.forEach(printer => {
const option = document.createElement('option');
option.value = printer.id;
option.textContent = `${printer.name} (${printer.model || 'Unbekanntes Modell'}) - Status unbekannt`;
printerSelect.appendChild(option);
});
showNotification(`${fallbackPrinters.length} Drucker geladen (Status unbekannt)`, 'info');
});
}
// Füge verfügbare Drucker hinzu
availablePrinters.forEach(printer => {
const option = document.createElement('option');
option.value = printer.id;
option.textContent = `${printer.name} (${printer.model || 'Unbekanntes Modell'})`;
// Status-Indikator hinzufügen
const statusText = printer.status === 'available' ? '✅ Verfügbar' : '⚠️ Status unbekannt';
option.textContent = `${printer.name} (${printer.model || 'Unbekanntes Modell'}) - ${statusText}`;
printerSelect.appendChild(option);
});
showNotification(`${availablePrinters.length} verfügbare Drucker geladen`, 'success');
})
.catch(error => {
console.error('Fehler beim Laden der Drucker:', error);
showNotification('Fehler beim Laden der Drucker', 'error');
// Fallback: Versuche normale Drucker-API
fetch('/api/printers')
.then(response => response.json())
.then(data => {
const printerSelect = document.getElementById('printer_id');
const printers = data.printers || [];
if (printers.length === 0) {
printerSelect.innerHTML = '<option value="">Keine Drucker verfügbar</option>';
showNotification('Keine Drucker gefunden', 'error');
return;
}
printers.forEach(printer => {
const option = document.createElement('option');
option.value = printer.id;
option.textContent = `${printer.name} (${printer.model || 'Unbekanntes Modell'}) - Status unbekannt`;
printerSelect.appendChild(option);
});
showNotification(`${printers.length} Drucker geladen (ohne Status-Check)`, 'warning');
})
.catch(fallbackError => {
console.error('Auch Fallback-API fehlgeschlagen:', fallbackError);
showNotification('Fehler beim Laden der Drucker', 'error');
});
});
}