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:
@@ -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');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -187,29 +187,60 @@
|
||||
// Load available printers
|
||||
async function loadPrinters() {
|
||||
try {
|
||||
const response = await apiCall('/api/printers');
|
||||
printers = response.printers || [];
|
||||
// Versuche zuerst Status-Check API für bessere Verfügbarkeitsprüfung
|
||||
let response;
|
||||
try {
|
||||
response = await apiCall('/api/printers/status');
|
||||
printers = Array.isArray(response) ? response : (response.printers || []);
|
||||
} catch (statusError) {
|
||||
console.log('Status-API fehlgeschlagen, verwende normale API:', statusError);
|
||||
response = await apiCall('/api/printers');
|
||||
printers = response.printers || [];
|
||||
}
|
||||
|
||||
const select = document.getElementById('printer-select');
|
||||
select.innerHTML = '<option value="">Drucker auswählen...</option>';
|
||||
|
||||
// Only show available printers
|
||||
const availablePrinters = printers.filter(p => p.status === 'available');
|
||||
console.log('Geladene Drucker:', printers);
|
||||
|
||||
// Filtere verfügbare Drucker (status: 'available' oder active: true)
|
||||
const availablePrinters = printers.filter(p => {
|
||||
return p.status === 'available' || p.active === true;
|
||||
});
|
||||
|
||||
console.log('Verfügbare Drucker:', availablePrinters);
|
||||
|
||||
if (availablePrinters.length === 0) {
|
||||
select.innerHTML = '<option value="">Keine verfügbaren Drucker</option>';
|
||||
select.disabled = true;
|
||||
showFlashMessage('Derzeit sind keine Drucker verfügbar', 'warning');
|
||||
// Zeige alle Drucker an, falls keine als verfügbar markiert sind
|
||||
if (printers.length > 0) {
|
||||
printers.forEach(printer => {
|
||||
const option = document.createElement('option');
|
||||
option.value = printer.id;
|
||||
option.textContent = `${printer.name} (${printer.location || printer.model || 'Unbekanntes Modell'}) - Status unbekannt`;
|
||||
select.appendChild(option);
|
||||
});
|
||||
showFlashMessage(`${printers.length} Drucker geladen (Status unbekannt)`, 'warning');
|
||||
} else {
|
||||
select.innerHTML = '<option value="">Keine Drucker verfügbar</option>';
|
||||
select.disabled = true;
|
||||
showFlashMessage('Keine Drucker in der Datenbank gefunden', 'error');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
availablePrinters.forEach(printer => {
|
||||
const option = document.createElement('option');
|
||||
option.value = printer.id;
|
||||
option.textContent = `${printer.name} (${printer.location})`;
|
||||
|
||||
// Status-Indikator hinzufügen
|
||||
const statusText = printer.status === 'available' ? '✅ Verfügbar' : '⚠️ Status unbekannt';
|
||||
const location = printer.location || printer.model || 'Unbekanntes Modell';
|
||||
option.textContent = `${printer.name} (${location}) - ${statusText}`;
|
||||
select.appendChild(option);
|
||||
});
|
||||
|
||||
showFlashMessage(`${availablePrinters.length} verfügbare Drucker geladen`, 'success');
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error loading printers:', error);
|
||||
showFlashMessage('Fehler beim Laden der Drucker', 'error');
|
||||
|
Reference in New Issue
Block a user