From b3c33f188b81d648d19d7c035ccd90ea43848b3a Mon Sep 17 00:00:00 2001 From: gurkvatten Date: Mon, 27 Apr 2026 19:37:53 +0200 Subject: [PATCH 1/3] changed ui --- .../controllers/HomeController.java | 8 ++++-- .../evidence/EvidenceFileService.java | 28 +++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/example/crimearchive/controllers/HomeController.java b/src/main/java/org/example/crimearchive/controllers/HomeController.java index 223b95b..552c481 100644 --- a/src/main/java/org/example/crimearchive/controllers/HomeController.java +++ b/src/main/java/org/example/crimearchive/controllers/HomeController.java @@ -91,7 +91,9 @@ public String saveReport( newReport.name(), newReport.event(), f, - currentUser.getUsername() + currentUser.getUsername(), + newReport.witness(), + newReport.victim() ); } } @@ -106,7 +108,9 @@ public String saveReport( newReport.name(), newReport.event(), img, - currentUser.getUsername() + currentUser.getUsername(), + newReport.witness(), + newReport.victim() ); } } diff --git a/src/main/java/org/example/crimearchive/evidence/EvidenceFileService.java b/src/main/java/org/example/crimearchive/evidence/EvidenceFileService.java index 225d8a7..c9e73ec 100644 --- a/src/main/java/org/example/crimearchive/evidence/EvidenceFileService.java +++ b/src/main/java/org/example/crimearchive/evidence/EvidenceFileService.java @@ -58,12 +58,24 @@ public EvidenceFileService(EvidenceFileRepository evidenceFileRepository, public void upload(String caseNumber, String reportName, String reportEvent, MultipartFile file, String uploadedBy) throws IOException { - upload(caseNumber, reportName, reportEvent, file, uploadedBy, null); + upload(caseNumber, reportName, reportEvent, file, uploadedBy, null, "", ""); + } + + public void upload(String caseNumber, String reportName, String reportEvent, + MultipartFile file, String uploadedBy, + String witness, String victim) throws IOException { + upload(caseNumber, reportName, reportEvent, file, uploadedBy, null, witness, victim); } - @Transactional public void upload(String caseNumber, String reportName, String reportEvent, MultipartFile file, String uploadedBy, UUID groupId) throws IOException { + upload(caseNumber, reportName, reportEvent, file, uploadedBy, groupId, "", ""); + } + + @Transactional + public void upload(String caseNumber, String reportName, String reportEvent, + MultipartFile file, String uploadedBy, UUID groupId, + String witness, String victim) throws IOException { String s3KeyPdf = null; String s3KeyFile = null; @@ -85,7 +97,7 @@ public void upload(String caseNumber, String reportName, String reportEvent, resolvedGroupId = UUID.randomUUID(); } - byte[] pdfBytes = generatePdf(reportName, reportEvent, file); + byte[] pdfBytes = generatePdf(caseNumber, reportName, reportEvent, witness, victim, file); s3KeyPdf = "cases/" + caseNumber + "/pdf/" + UUID.randomUUID() + ".pdf"; s3Client.putObject( @@ -198,15 +210,19 @@ private void requireCaseAccess(String caseNumber, Account currentUser) { } } - private byte[] generatePdf(String reportName, String reportEvent, MultipartFile file) throws Exception { + private byte[] generatePdf(String caseNumber, String reportName, String reportEvent, + String witness, String victim, MultipartFile file) throws Exception { ByteArrayOutputStream pdfStream = new ByteArrayOutputStream(); Document document = new Document(); PdfWriter.getInstance(document, pdfStream); document.open(); document.add(new Paragraph("Brottsanmälan")); - document.add(new Paragraph("Namn: " + reportName)); - document.add(new Paragraph("Brottstyp: " + reportEvent)); + document.add(new Paragraph("K-nummer: " + caseNumber)); + document.add(new Paragraph("Ansvarig polis: " + reportName)); + document.add(new Paragraph("Brottsplats: " + reportEvent)); + document.add(new Paragraph("Vittne: " + (witness != null && !witness.isBlank() ? witness : "-"))); + document.add(new Paragraph("Offer: " + (victim != null && !victim.isBlank() ? victim : "-"))); document.add(new Paragraph("Datum: " + LocalDateTime.now())); if (file != null && !file.isEmpty()) { From 70a210a3fc699820b64e8f7df0530138693b2cc2 Mon Sep 17 00:00:00 2001 From: gurkvatten Date: Mon, 27 Apr 2026 19:57:01 +0200 Subject: [PATCH 2/3] changed ui --- .../resources/templates/registerreport.html | 84 ++++++++++++++----- 1 file changed, 62 insertions(+), 22 deletions(-) diff --git a/src/main/resources/templates/registerreport.html b/src/main/resources/templates/registerreport.html index fae4869..64a2598 100644 --- a/src/main/resources/templates/registerreport.html +++ b/src/main/resources/templates/registerreport.html @@ -75,38 +75,78 @@

Bifoga bevis

From 8ea4417cad669c7a551334dd64a1afacf824695f Mon Sep 17 00:00:00 2001 From: gurkvatten Date: Mon, 27 Apr 2026 20:04:00 +0200 Subject: [PATCH 3/3] ui changes on buttons --- src/main/resources/templates/reports.html | 92 +++++++++++------------ 1 file changed, 43 insertions(+), 49 deletions(-) diff --git a/src/main/resources/templates/reports.html b/src/main/resources/templates/reports.html index cc4c341..fbb3be1 100644 --- a/src/main/resources/templates/reports.html +++ b/src/main/resources/templates/reports.html @@ -245,58 +245,52 @@

Brottsplats

return list.some(f => f.name === file.name && f.size === file.size); } - function renderList(label, filesArray, type) { - const section = document.createElement("div"); - section.classList.add("evidence-section"); - - const title = document.createElement("strong"); - title.textContent = label; - section.appendChild(title); - - const list = document.createElement("ul"); - - filesArray.forEach((file, index) => { - const li = document.createElement("li"); - - const text = document.createElement("span"); - text.textContent = file.name; - - const removeBtn = document.createElement("button"); - removeBtn.textContent = "❌"; - removeBtn.style.marginLeft = "10px"; - removeBtn.type = "button"; - removeBtn.setAttribute("aria-label", `Ta bort ${file.name}`); - - removeBtn.onclick = () => { - if (type === "file") { - selectedFiles.splice(index, 1); - updateInput(fileInput, selectedFiles); - } else { - selectedImages.splice(index, 1); - updateInput(imageInput, selectedImages); - } - renderAll(); - }; - - li.appendChild(text); - li.appendChild(removeBtn); - list.appendChild(li); - }); - - section.appendChild(list); - return section; - } - function renderAll() { evidenceList.innerHTML = ""; - if (selectedFiles.length > 0) { - evidenceList.appendChild(renderList("Filer:", selectedFiles, "file")); - } - - if (selectedImages.length > 0) { - evidenceList.appendChild(renderList("Bilder:", selectedImages, "image")); - } + [ + { filesArray: selectedFiles, label: "Fil", type: "file" }, + { filesArray: selectedImages, label: "Bild", type: "image" } + ].forEach(({ filesArray, label, type }) => { + filesArray.forEach((file, index) => { + const row = document.createElement("div"); + row.className = "evidence-row"; + + const meta = document.createElement("div"); + meta.className = "file-meta"; + + const name = document.createElement("span"); + name.className = "file-name"; + name.textContent = file.name; + + const info = document.createElement("span"); + info.className = "file-type"; + info.textContent = label + " · " + (file.size / 1024).toFixed(1) + " KB"; + + meta.appendChild(name); + meta.appendChild(info); + row.appendChild(meta); + + const removeBtn = document.createElement("button"); + removeBtn.textContent = "Ta bort"; + removeBtn.type = "button"; + removeBtn.className = "btn btn-danger btn-sm"; + removeBtn.setAttribute("aria-label", `Ta bort ${file.name}`); + removeBtn.onclick = () => { + if (type === "file") { + selectedFiles.splice(index, 1); + updateInput(fileInput, selectedFiles); + } else { + selectedImages.splice(index, 1); + updateInput(imageInput, selectedImages); + } + renderAll(); + }; + + row.appendChild(removeBtn); + evidenceList.appendChild(row); + }); + }); } fileInput.addEventListener("change", () => {