diff --git a/backend/docker_push.sh b/backend/docker_push.sh index f3289fe..2f339a5 100755 --- a/backend/docker_push.sh +++ b/backend/docker_push.sh @@ -64,7 +64,8 @@ cd "${SCRIPT_DIR}" echo "Verwende Release-Version ${VERSION}." echo "Baue Production-JAR für Version ${VERSION} ..." -(cd "${BACKEND_DIR}" && ./mvnw -Pproduction -DskipTests -Drevision="${VERSION}" package) +# Klassen aus vorherigen Maven-/IDE-Builds vor dem Vaadin-Klassenscan entfernen. +(cd "${BACKEND_DIR}" && ./mvnw -e -Pproduction -DskipTests -Drevision="${VERSION}" clean package) JAR_FILE_REL="target/votianlt-${VERSION}.jar" JAR_FILE_ABS="${BACKEND_DIR}/${JAR_FILE_REL}" diff --git a/backend/pom.xml b/backend/pom.xml index ff1981f..00cc5db 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -11,7 +11,7 @@ jar - 0.9.24 + 0.9.25 21 21 21 diff --git a/backend/src/main/bundles/dev.bundle b/backend/src/main/bundles/dev.bundle index 76304aa..928496d 100644 Binary files a/backend/src/main/bundles/dev.bundle and b/backend/src/main/bundles/dev.bundle differ diff --git a/backend/src/main/bundles/prod.bundle b/backend/src/main/bundles/prod.bundle index 8c8689d..f16e5fd 100644 Binary files a/backend/src/main/bundles/prod.bundle and b/backend/src/main/bundles/prod.bundle differ diff --git a/backend/src/main/frontend/invoice-generator/profile-invoice-generator.js b/backend/src/main/frontend/invoice-generator/profile-invoice-generator.js index b4611e8..26ee773 100644 --- a/backend/src/main/frontend/invoice-generator/profile-invoice-generator.js +++ b/backend/src/main/frontend/invoice-generator/profile-invoice-generator.js @@ -233,28 +233,9 @@ window.initProfileInvoiceGenerator = function() { var img = new Image(); img.onload = function() { imageCache[el.imageData] = img; - // Calculate dimensions to maintain aspect ratio - var imgAspect = img.width / img.height; - var boxAspect = w / h; - var drawW, drawH, drawX, drawY; - - if (imgAspect > boxAspect) { - drawW = w; - drawH = w / imgAspect; - drawX = x; - drawY = y + (h - drawH) / 2; - } else { - drawW = h * imgAspect; - drawH = h; - drawX = x + (w - drawW) / 2; - drawY = y; - } - - ctx.drawImage(img, drawX, drawY, drawW, drawH); - // Redraw selection if this element is selected - if (selectedElement && selectedElement.id === el.id) { - drawSelection(el); - } + // Redraw in element order: a letterhead loaded asynchronously must + // stay behind the invoice text, including after resize or removal. + draw(); }; img.src = el.imageData; } diff --git a/backend/src/main/java/de/assecutor/votianlt/controller/MessageController.java b/backend/src/main/java/de/assecutor/votianlt/controller/MessageController.java index b7e03fa..53c9a91 100644 --- a/backend/src/main/java/de/assecutor/votianlt/controller/MessageController.java +++ b/backend/src/main/java/de/assecutor/votianlt/controller/MessageController.java @@ -405,7 +405,8 @@ public class MessageController { try { String taskType = task.getTaskType() != null ? task.getTaskType().toString() : "Unknown"; String completedBy = resolveTaskActor(task, appUserId); - emailService.sendTaskCompletionNotification(jobId, taskType, taskIdStr, completedBy); + emailService.sendTaskCompletionNotification(jobId, taskType, taskIdStr, completedBy, + task.getDescription()); // Job completion is no longer auto-triggered by task completion. // It is now driven by explicit station_completed messages from the app // (see handleStationCompleted). diff --git a/backend/src/main/java/de/assecutor/votianlt/service/CustomerInvoiceService.java b/backend/src/main/java/de/assecutor/votianlt/service/CustomerInvoiceService.java index 6e06cb1..79a153d 100644 --- a/backend/src/main/java/de/assecutor/votianlt/service/CustomerInvoiceService.java +++ b/backend/src/main/java/de/assecutor/votianlt/service/CustomerInvoiceService.java @@ -324,7 +324,7 @@ public class CustomerInvoiceService { htmlBuilder.append("