From 37cd332d67c9e2e447db4e9babbaff05ebe155a9 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Fri, 30 May 2025 21:16:58 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20"=F0=9F=90=9B=20Backend=20update?= =?UTF-8?q?:=20Refactored=20database=20connection=20in=20myp.db?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/database/myp.db | Bin 110592 -> 110592 bytes .../admin_guest_requests_overview.html | 140 +++++++++++------- 2 files changed, 83 insertions(+), 57 deletions(-) diff --git a/backend/app/database/myp.db b/backend/app/database/myp.db index 4b78cad455b3d2a31b982d6b4dca484991424bc7..b891c9f4861ef6cb1b7a3ec37f48ee36268fc709 100644 GIT binary patch delta 287 zcmZp8z}E19ZGyBQHv#nboQf?<-OWQ1(<{Bb3M@TJ z^#Z&M(hAE$3(Af3%ECQNbBpuCv%E^Z9sRsKJUtvsC%5UFYZw_?85&uc8tWMwnV4Cc z8W|Xw>Kd5p8XG7e$(Wj$Y<{YrtIG#eY-nX_qGx7mX<%VKIU#nXAd--gsZpZ>^W=nh zvCRf?R}%SHx!*GIEAXlFX7a4&e!IC*;5IjNqc!W~b!VFRA*LIf>KR*_nwptUwm&P4 wDrRo9dG(pd&3vrKd5p8XG7W8CaPbSQ!}V8JZiI8E<~7pR3CU7BV){GcYnYG&P=_5W7+kA!KH0 zXxym4JUJm=Y_mb!l|&vEp4ANe3ViCknLMjEHww(=VQ#c$nf&2&(`JLSS2ppm@SkVk d|IGiK|2F^m&4LE|`KKT5XB6N5te;Uz0RXdCMkN3M diff --git a/backend/app/templates/admin_guest_requests_overview.html b/backend/app/templates/admin_guest_requests_overview.html index c7e7f102..35fc7cdd 100644 --- a/backend/app/templates/admin_guest_requests_overview.html +++ b/backend/app/templates/admin_guest_requests_overview.html @@ -558,6 +558,12 @@ let currentPage = 0; let pageSize = 20; let totalRequests = 0; let currentRequestId = null; +let allPrinters = []; + +// Prüfung der Admin-Berechtigung - zeige Inline-Aktionen nur für Admins +const userIsAdmin = {{ current_user.is_admin|tojson if current_user.is_authenticated else 'false' }}; +const userCanApprove = {{ (current_user.permissions and current_user.permissions.can_approve_jobs)|tojson if current_user.is_authenticated and current_user.permissions else 'false' }}; +const showInlineActions = userIsAdmin || userCanApprove; // Initialisierung document.addEventListener('DOMContentLoaded', function() { @@ -641,29 +647,24 @@ async function loadGuestRequests() { const params = new URLSearchParams({ page: currentPage, - page_size: pageSize + page_size: pageSize, + status: status !== 'all' ? status : '', + sort: sort, + search: search }); - if (status !== 'all') params.append('status', status); - if (urgent !== 'all') params.append('urgent', urgent); - if (sort) params.append('sort', sort); - if (search) params.append('search', search); + if (urgent !== 'all') { + params.append('urgent', urgent === 'urgent'); + } const response = await fetch(`/api/admin/guest-requests?${params}`); - // Enhanced error handling for JSON parsing - let data; - try { - const text = await response.text(); - if (!text.trim()) { - throw new Error('Leere Antwort vom Server'); - } - data = JSON.parse(text); - } catch (parseError) { - console.error('JSON Parse Error:', parseError, 'Response text:', text); - throw new Error(`JSON-Parsing-Fehler beim Laden der Anträge: ${parseError.message}`); + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); } + const data = await response.json(); + if (data.success) { currentRequests = data.requests; totalRequests = data.total; @@ -671,11 +672,15 @@ async function loadGuestRequests() { renderRequestsTable(data.requests); updatePagination(); } else { - showNotification('Fehler beim Laden der Anträge: ' + (data.message || 'Unbekannter Fehler'), 'error'); + throw new Error(data.message || 'Unbekannter Fehler beim Laden der Daten'); } } catch (error) { - console.error('Fehler beim Laden der Anträge:', error); - showNotification('Fehler beim Laden der Anträge: ' + error.message, 'error'); + console.error('Fehler beim Laden der Gastanträge:', error); + showNotification(`Fehler beim Laden der Gastanträge: ${error.message}`, 'error'); + + // Zeige leere Tabelle bei Fehler + renderRequestsTable([]); + updateStatistics({}); } finally { showLoading(false); } @@ -687,6 +692,8 @@ async function loadAvailablePrinters() { const data = await response.json(); if (data.success) { + allPrinters = data.printers; + const select = document.getElementById('assignedPrinter'); select.innerHTML = ''; @@ -772,12 +779,13 @@ function createRequestRow(request) { ${request.duration_minutes || 0} Min, ${request.copies || 1} Kopien + ${request.reason ? `
${escapeHtml(request.reason.substring(0, 100))}${request.reason.length > 100 ? '...' : ''}
` : ''} ${getStatusIcon(request.status)} ${getStatusText(request.status)} - ${request.status === 'pending' ? ` + ${request.status === 'pending' && showInlineActions ? `
-