diff --git a/README.md b/README.md
index b6df897..46ef489 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ Nyckel-URLer (språkprefixed):
- **Auto-prefill:** Inloggade användare får namn, e-post och senaste kontonummer förifyllt.
- **Valuta & projekt:** Varje rad har dold valutaväljare (SEK default) och projektreferens. Projekt listas från Django admin > Projekt.
- **Kvitton:** Filuppladdningar sparas med slumpat UUID-baserat namn under `receipts/` för säkerhet och unika namn.
-- **Dashboard:** KPI-kort med totalsiffror, senaste aktivitet, statusfördelning och samma inline-flöde för beslut/utbetalningar (inkl. möjlighet att korrigera projekt vid beslut).
+- **Dashboard:** KPI-kort med totalsiffror, senaste aktivitet, statusfördelning och samma inline-flöde för beslut/utbetalningar. Attestanter kan öppna en redigeringspanel för att justera namn, belopp, valuta, kontonummer och projekt innan beslut.
- **Betalspårning:** När intern betalning är på får godkända claims en "Betala"-knapp. När ett claim markeras som betalt låses status/kommentar tills reset görs.
- **Mina utlägg:** Inloggade ser sina egna claims i samma Tailwind-layout med kvitto-länk och logg.
- **Användarhantering:** Tailwind-sida där personal kan skapa konton, tilldela `claims.view_claim`/`claims.change_claim`, markera staff och ta bort användare.
diff --git a/claims/forms.py b/claims/forms.py
index b71b1bf..434a774 100644
--- a/claims/forms.py
+++ b/claims/forms.py
@@ -73,14 +73,15 @@ class ClaimDecisionForm(forms.Form):
label=_("Evenemang/Projekt"),
)
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.fields["project"].queryset = Project.objects.filter(is_active=True).order_by("name")
decision_note = forms.CharField(
required=False,
widget=forms.Textarea(attrs={"rows": 2, "placeholder": _("Kommentar")}),
)
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.fields["project"].queryset = Project.objects.filter(is_active=True).order_by("name")
+
def clean(self):
cleaned = super().clean()
action = cleaned.get("action")
@@ -90,6 +91,29 @@ class ClaimDecisionForm(forms.Form):
return cleaned
+class ClaimEditForm(forms.ModelForm):
+ class Meta:
+ model = Claim
+ fields = [
+ "full_name",
+ "email",
+ "account_number",
+ "amount",
+ "currency",
+ "project",
+ "description",
+ ]
+ labels = {
+ "full_name": _("Namn"),
+ "email": _("E-post"),
+ "account_number": _("Kontonummer"),
+ "amount": _("Belopp"),
+ "currency": _("Valuta"),
+ "project": _("Evenemang/Projekt"),
+ "description": _("Beskrivning"),
+ }
+
+
class UserManagementForm(forms.Form):
username = forms.CharField(max_length=150, label=_("Användarnamn"))
email = forms.EmailField(required=False, label=_("E-post"))
diff --git a/claims/models.py b/claims/models.py
index 9f97cbd..373a113 100644
--- a/claims/models.py
+++ b/claims/models.py
@@ -123,6 +123,7 @@ class ClaimLog(models.Model):
STATUS_CHANGED = "status_changed", _("Status changed")
MARKED_PAID = "marked_paid", _("Marked as paid")
PROJECT_CHANGED = "project_changed", _("Project changed")
+ DETAILS_EDITED = "details_edited", _("Details edited")
claim = models.ForeignKey(Claim, related_name="logs", on_delete=models.CASCADE)
action = models.CharField(max_length=32, choices=Action.choices)
diff --git a/claims/templates/claims/dashboard.html b/claims/templates/claims/dashboard.html
index dd738b2..938da65 100644
--- a/claims/templates/claims/dashboard.html
+++ b/claims/templates/claims/dashboard.html
@@ -118,25 +118,32 @@
-
-
- {{ claim.get_status_display }}
-
- {% if claim.decision_note %}
-
{% trans "Kommentar" %}: {{ claim.decision_note }}
+
+
+ {{ claim.get_status_display }}
+
+ {% if claim.decision_note %}
+
{% trans "Kommentar" %}: {{ claim.decision_note }}
{% endif %}
{% if payments_enabled and claim.status == 'approved' %}
- {% if claim.is_paid %}
-
- {% trans "Betald" %} {{ claim.paid_at|date:"Y-m-d H:i" }}
- {% if claim.paid_by %}{% trans "av" %} {{ claim.paid_by.get_username }}{% endif %}
-
- {% else %}
-
{% trans "Ej markerad som betald" %}
- {% endif %}
- {% endif %}
-
-
+ {% if claim.is_paid %}
+
+ {% trans "Betald" %} {{ claim.paid_at|date:"Y-m-d H:i" }}
+ {% if claim.paid_by %}{% trans "av" %} {{ claim.paid_by.get_username }}{% endif %}
+
+ {% else %}
+ {% trans "Ej markerad som betald" %}
+ {% endif %}
+ {% endif %}
+ {% if can_change %}
+
+ {% endif %}
+
+
{% if claim.status == 'approved' %}
@@ -294,6 +301,78 @@
{% trans "Välj en annan status för att se fler poster." %}
{% endif %}
+ {% if can_change %}
+
+
+
+
+
{% trans "Redigera utlägg" %}
+
{{ claim.full_name }}
+
+
+
+
+
+
+
+ {% endif %}