Add inline edit panel for claims
This commit is contained in:
@@ -17,6 +17,7 @@ from django.views.generic import ListView, TemplateView
|
||||
|
||||
from .forms import (
|
||||
ClaimDecisionForm,
|
||||
ClaimEditForm,
|
||||
ClaimLineForm,
|
||||
ClaimantForm,
|
||||
DeleteUserForm,
|
||||
@@ -162,6 +163,7 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
context["payments_enabled"] = getattr(settings, "CLAIMS_ENABLE_INTERNAL_PAYMENTS", False)
|
||||
context["summary"] = self._build_summary()
|
||||
context["project_options"] = Project.objects.filter(is_active=True).order_by("name")
|
||||
context["currency_choices"] = Claim.Currency.choices
|
||||
context["has_any_claims"] = context["summary"]["total_claims"] > 0
|
||||
context["has_filtered_claims"] = self._has_filtered_claims(context["status_filter"], context["summary"])
|
||||
context["recent_claims"] = (
|
||||
@@ -175,6 +177,8 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
action_type = request.POST.get("action_type", "decision")
|
||||
if action_type == "payment":
|
||||
return self._handle_payment(request)
|
||||
if action_type == "edit":
|
||||
return self._handle_edit(request)
|
||||
return self._handle_decision(request)
|
||||
|
||||
def _handle_decision(self, request):
|
||||
@@ -256,6 +260,39 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
messages.success(request, _("%(claim)s markerades som betald.") % {"claim": claim})
|
||||
return redirect(request.get_full_path())
|
||||
|
||||
def _handle_edit(self, request):
|
||||
if not request.user.has_perm("claims.change_claim"):
|
||||
messages.error(request, _("Du har inte behörighet att uppdatera utlägg."))
|
||||
return redirect(request.get_full_path())
|
||||
claim = get_object_or_404(Claim, pk=request.POST.get("edit_claim_id"))
|
||||
form = ClaimEditForm(request.POST, instance=claim)
|
||||
if not form.is_valid():
|
||||
for error in form.errors.get("__all__", []):
|
||||
messages.error(request, error)
|
||||
for field, field_errors in form.errors.items():
|
||||
if field == "__all__":
|
||||
continue
|
||||
for error in field_errors:
|
||||
messages.error(request, f"{form.fields[field].label}: {error}")
|
||||
return redirect(request.get_full_path())
|
||||
|
||||
updated_claim = form.save()
|
||||
changed_fields = []
|
||||
for field in form.changed_data:
|
||||
label = form.fields[field].label or field
|
||||
changed_fields.append(str(label))
|
||||
if changed_fields:
|
||||
note = _("Fields updated: %(fields)s") % {"fields": ", ".join(changed_fields)}
|
||||
claim.add_log(
|
||||
action=ClaimLog.Action.DETAILS_EDITED,
|
||||
performed_by=request.user,
|
||||
note=note,
|
||||
)
|
||||
messages.success(request, _("Informationen uppdaterades."))
|
||||
else:
|
||||
messages.info(request, _("Inga förändringar att spara."))
|
||||
return redirect(request.get_full_path())
|
||||
|
||||
def _build_summary(self):
|
||||
now = timezone.now()
|
||||
last_week = now - timedelta(days=7)
|
||||
|
||||
Reference in New Issue
Block a user