🐛 Backend Documentation Fix for Button Reservation Creation Issue & Undefined Jobs Problem 🖥️📚

This commit is contained in:
Till Tomczak
2025-06-20 12:16:21 +02:00
parent 533132002a
commit b29b38c8a4
22 changed files with 580 additions and 25 deletions

File diff suppressed because one or more lines are too long

View File

@ -281,17 +281,38 @@ window.refreshJobs = async function() {
return '';
}
// Verbesserte Feldermapping für Frontend-Kompatibilität
const jobName = job.name || job.title || job.filename || job.file_name || 'Unbekannter Job';
const printerName = job.printer_name || (job.printer?.name) || 'Unbekannter Drucker';
const userName = job.user_name || (job.user?.name) || 'Unbekannter Benutzer';
const statusText = job.status_text || job.status || 'Unbekannt';
const createdDate = job.created_time || (job.created_at ? new Date(job.created_at).toLocaleDateString('de-DE') : 'Unbekannt');
const progress = job.progress || 0;
return `
<div class="job-card p-4 border rounded-lg bg-white dark:bg-slate-800 shadow-sm hover:shadow-md transition-shadow">
<h3 class="font-semibold text-gray-900 dark:text-white mb-2">
${job.filename || job.title || job.name || 'Unbekannter Job'}
</h3>
<div class="flex justify-between items-start mb-3">
<h3 class="font-semibold text-gray-900 dark:text-white text-lg">
${jobName}
</h3>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatusBadgeClass(job.status)}">
${statusText}
</span>
</div>
<div class="text-sm text-gray-600 dark:text-gray-400 space-y-1">
<p><span class="font-medium">ID:</span> ${job.id || 'N/A'}</p>
<p><span class="font-medium">Status:</span> ${job.status || 'Unbekannt'}</p>
${job.printer_name ? `<p><span class="font-medium">Drucker:</span> ${job.printer_name}</p>` : ''}
${job.created_at ? `<p><span class="font-medium">Erstellt:</span> ${new Date(job.created_at).toLocaleDateString('de-DE')}</p>` : ''}
<p><span class="font-medium">Drucker:</span> ${printerName}</p>
<p><span class="font-medium">Benutzer:</span> ${userName}</p>
<p><span class="font-medium">Erstellt:</span> ${createdDate}</p>
${progress > 0 ? `<p><span class="font-medium">Fortschritt:</span> ${progress}%</p>` : ''}
</div>
${progress > 0 ? `
<div class="mt-3">
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-blue-600 h-2 rounded-full" style="width: ${progress}%"></div>
</div>
</div>
` : ''}
</div>
`;
}).filter(card => card !== '').join('');
@ -342,13 +363,12 @@ window.refreshJobs = async function() {
<div class="text-red-400 dark:text-red-600 text-6xl mb-4">⚠️</div>
<h3 class="text-lg font-medium text-gray-900 dark:text-white mb-2">Fehler beim Laden</h3>
<p class="text-gray-500 dark:text-gray-400 mb-4">${errorMessage}</p>
<button onclick="refreshJobs()" class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors">
<button onclick="refreshJobs()" class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700">
Erneut versuchen
</button>
</div>
`;
}
} finally {
if (refreshButton) {
refreshButton.disabled = false;
@ -733,4 +753,24 @@ document.addEventListener('visibilitychange', function() {
}
});
console.log('🔄 Globale Refresh-Funktionen geladen');
console.log('🔄 Globale Refresh-Funktionen geladen');
/**
* Hilfsfunktion für Status-Badge-CSS-Klassen
*/
function getStatusBadgeClass(status) {
const statusClasses = {
'scheduled': 'bg-blue-100 text-blue-800 dark:bg-blue-900/20 dark:text-blue-400',
'pending': 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400',
'running': 'bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400',
'printing': 'bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400',
'completed': 'bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400',
'finished': 'bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400',
'failed': 'bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400',
'cancelled': 'bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400',
'aborted': 'bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400',
'paused': 'bg-orange-100 text-orange-800 dark:bg-orange-900/20 dark:text-orange-400'
};
return statusClasses[status] || 'bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400';
}