diff --git a/frontend/src/components/admin/AuditLogView.jsx b/frontend/src/components/admin/AuditLogView.jsx index 28d43f4..13031bb 100644 --- a/frontend/src/components/admin/AuditLogView.jsx +++ b/frontend/src/components/admin/AuditLogView.jsx @@ -14,6 +14,7 @@ import { Activity, Hash } from 'lucide-react'; +import { getActionLabel } from '../../utils/statusHelper'; // --- HUVUDKOMPONENT --- const AuditLogView = ({ logs = [], loading }) => { @@ -149,7 +150,7 @@ const AuditLogView = ({ logs = [], loading }) => {

- {log.action.replace('_', ' ')} + {getActionLabel(log.action)}

{
-
-

Admininstratörer

+
+

Administratörer

{stats.admins}

@@ -239,7 +239,7 @@ const AdminDashboard = ({ userName, initialTab = 'USERS' }) => { activeTab === 'LOGS' ? 'bg-white text-slate-900 shadow-sm' : 'text-slate-400' }`} > - Audit Log + Aktivitetslogg
diff --git a/frontend/src/pages/CaseDetail.jsx b/frontend/src/pages/CaseDetail.jsx index 1d6c05e..8491e7b 100644 --- a/frontend/src/pages/CaseDetail.jsx +++ b/frontend/src/pages/CaseDetail.jsx @@ -1,6 +1,6 @@ import React, { useState, useEffect, useRef } from 'react'; import { commentService, activityService, attachmentService, medicalRecordService } from '../services/api'; -import { STATUS_MAP } from '../utils/statusHelper'; +import { STATUS_MAP, ACTIVE_STATUS_KEYS } from '../utils/statusHelper'; import { Stethoscope, Lock, FileText, CheckCircle, Upload, Trash2, ExternalLink, UserMinus } from 'lucide-react'; const CaseDetail = ({ caseData, onBack, onGoToPet, currentUserId, userRole, onDirtyChange }) => { @@ -252,9 +252,9 @@ const CaseDetail = ({ caseData, onBack, onGoToPet, currentUserId, userRole, onDi onChange={(e) => handleStatusChange(e.target.value)} className="bg-slate-800 border border-slate-700 text-sm font-bold rounded-xl px-4 py-2 outline-none focus:ring-2 focus:ring-vet-accent transition-all cursor-pointer" > - - - + {ACTIVE_STATUS_KEYS.map((key) => ( + + ))}
{caseData.assignedVetId === currentUserId && ( diff --git a/frontend/src/utils/statusHelper.js b/frontend/src/utils/statusHelper.js index 1bdfcf8..a179333 100644 --- a/frontend/src/utils/statusHelper.js +++ b/frontend/src/utils/statusHelper.js @@ -1,7 +1,34 @@ // src/utils/statusHelper.js +// +// Gemensam mappning från backend-enum till svenska visningstexter. +// Används överallt där status eller aktivitetsloggar visas i UI:t så att +// texterna förblir konsekventa. Motsvarighet finns i backend +// (RecordStatus.displayLabel()) för loggrader som skrivs till databasen. + export const STATUS_MAP = { - 'OPEN': { label: 'Inskickat', color: 'bg-blue-50 text-blue-700 border-blue-100' }, - 'IN_PROGRESS': { label: 'Under behandling', color: 'bg-yellow-50 text-yellow-700 border-yellow-100' }, - 'AWAITING_INFO': { label: 'Väntar på svar', color: 'bg-purple-50 text-purple-700 border-purple-100' }, - 'CLOSED': { label: 'Avslutat', color: 'bg-slate-50 text-slate-500 border-slate-100' } -}; \ No newline at end of file + 'OPEN': { label: 'Öppen', color: 'bg-blue-50 text-blue-700 border-blue-100' }, + 'IN_PROGRESS': { label: 'Under behandling', color: 'bg-yellow-50 text-yellow-700 border-yellow-100' }, + 'AWAITING_INFO': { label: 'Väntar på svar', color: 'bg-purple-50 text-purple-700 border-purple-100' }, + 'CLOSED': { label: 'Avslutad', color: 'bg-slate-50 text-slate-500 border-slate-100' } +}; + +// Statusar som VET kan välja i dropdown. CLOSED utesluts — stängning sker +// via "Slutför & Stäng"-modalen för att tvinga fram en slutnotering. +export const ACTIVE_STATUS_KEYS = ['OPEN', 'IN_PROGRESS', 'AWAITING_INFO']; + +// Svensk label för en status, med fallback till raw-värdet om enum-värdet +// inte känns igen (t.ex. nytt värde tillagt i backend men inte här). +export const getStatusLabel = (status) => STATUS_MAP[status]?.label ?? status; + +// Mappning för ActivityType-enum → svensk rubrik. +// Används av AuditLogView i admin-vyn där log.action visas direkt. +export const ACTION_LABELS = { + 'CASE_CREATED': 'Ärende skapat', + 'STATUS_CHANGED': 'Status ändrad', + 'COMMENT_ADDED': 'Kommentar tillagd', + 'ASSIGNED': 'Veterinär tilldelad', + 'UNASSIGNED': 'Ärende släppt', + 'UPDATED': 'Ärende uppdaterat' +}; + +export const getActionLabel = (action) => ACTION_LABELS[action] ?? action; diff --git a/src/main/java/org/example/vet1177/entities/RecordStatus.java b/src/main/java/org/example/vet1177/entities/RecordStatus.java index 14e879c..6ec6e65 100644 --- a/src/main/java/org/example/vet1177/entities/RecordStatus.java +++ b/src/main/java/org/example/vet1177/entities/RecordStatus.java @@ -1,7 +1,23 @@ package org.example.vet1177.entities; public enum RecordStatus { - OPEN, IN_PROGRESS, AWAITING_INFO, CLOSED; + OPEN("Öppen"), + IN_PROGRESS("Under behandling"), + AWAITING_INFO("Väntar på svar"), + CLOSED("Avslutad"); + + private final String displayLabel; + + RecordStatus(String displayLabel) { + this.displayLabel = displayLabel; + } + + // Svensk visningstext. Används i serverskrivna aktivitetsloggar så att + // loggraderna i activity_log lagras på samma språk som övriga beskrivningar. + // Frontend har motsvarande STATUS_MAP i statusHelper.js. + public String displayLabel() { + return displayLabel; + } public boolean isFinal() { return this == CLOSED; diff --git a/src/main/java/org/example/vet1177/services/MedicalRecordService.java b/src/main/java/org/example/vet1177/services/MedicalRecordService.java index e0f59ea..af03c19 100644 --- a/src/main/java/org/example/vet1177/services/MedicalRecordService.java +++ b/src/main/java/org/example/vet1177/services/MedicalRecordService.java @@ -250,10 +250,10 @@ public MedicalRecord updateStatus(UUID recordId, RecordStatus newStatus, User up MedicalRecord updated = medicalRecordRepository.save(record); - // LOGGING + // LOGGING — använd svensk label så loggen matchar UI-texterna. activityLogService.log( ActivityType.STATUS_CHANGED, - "Status ändrad till: " + newStatus, + "Status ändrad till: " + newStatus.displayLabel(), updatedBy, updated ); diff --git a/src/test/java/org/example/vet1177/services/MedicalRecordServiceTest.java b/src/test/java/org/example/vet1177/services/MedicalRecordServiceTest.java index 0f5ec88..d080e28 100644 --- a/src/test/java/org/example/vet1177/services/MedicalRecordServiceTest.java +++ b/src/test/java/org/example/vet1177/services/MedicalRecordServiceTest.java @@ -431,7 +431,7 @@ void updateStatus_shouldLogActivity() { verify(activityLogService).log( eq(ActivityType.STATUS_CHANGED), - contains("AWAITING_INFO"), + contains(RecordStatus.AWAITING_INFO.displayLabel()), eq(currentUser), eq(record)); }