11 Commits

Author SHA1 Message Date
Victor Andersson
2de32b2083 feat: harden dashboard editing and translations 2025-11-11 20:27:41 +01:00
Victor Andersson
559ed671f3 Attach edit button handler with JS listeners 2025-11-10 23:20:59 +01:00
Victor Andersson
9499eb6395 Render edit overlay per claim 2025-11-09 22:18:22 +01:00
Victor Andersson
968150b074 Fix edit button for text-node targets 2025-11-09 22:05:01 +01:00
Victor Andersson
c189fd053c Expose edit panel opener globally 2025-11-09 22:03:29 +01:00
Victor Andersson
3323ffd82e Use delegated handlers for edit panel 2025-11-09 22:00:14 +01:00
Victor Andersson
f42381a9a0 Make edit panel work without dialog support 2025-11-09 21:58:04 +01:00
Victor Andersson
78377a7ae9 Switch edit overlay to modal dialog 2025-11-09 21:53:22 +01:00
Victor Andersson
caf3df24cf Add inline edit panel for claims 2025-11-09 21:49:44 +01:00
Victor Andersson
0d68c75fef Log project changes during approvals 2025-11-09 14:05:28 +01:00
Victor Andersson
70aeca6187 Allow approvers to adjust project before approving 2025-11-09 13:57:54 +01:00
11 changed files with 1617 additions and 235 deletions

View File

@@ -26,7 +26,7 @@ Nyckel-URLer (språkprefixed):
- **Auto-prefill:** Inloggade användare får namn, e-post och senaste kontonummer förifyllt. - **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. - **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. - **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. - **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. - **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. - **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. - **Användarhantering:** Tailwind-sida där personal kan skapa konton, tilldela `claims.view_claim`/`claims.change_claim`, markera staff och ta bort användare.

View File

@@ -58,15 +58,18 @@ class ClaimLineForm(forms.ModelForm):
class ClaimDecisionForm(forms.Form): class ClaimDecisionForm(forms.Form):
ACTION_PENDING = "pending"
ACTION_APPROVE = "approve" ACTION_APPROVE = "approve"
ACTION_REJECT = "reject" ACTION_REJECT = "reject"
ACTION_CHOICES = ( ACTION_CHOICES = (
(ACTION_APPROVE, _("Godkänn")), (ACTION_APPROVE, _("Godkänn")),
(ACTION_REJECT, _("Neka")), (ACTION_REJECT, _("Neka")),
(ACTION_PENDING, _("Pending")),
) )
claim_id = forms.IntegerField(widget=forms.HiddenInput) claim_id = forms.IntegerField(widget=forms.HiddenInput)
action = forms.ChoiceField(choices=ACTION_CHOICES) action = forms.ChoiceField(choices=ACTION_CHOICES)
decision_note = forms.CharField( decision_note = forms.CharField(
required=False, required=False,
widget=forms.Textarea(attrs={"rows": 2, "placeholder": _("Kommentar")}), widget=forms.Textarea(attrs={"rows": 2, "placeholder": _("Kommentar")}),
@@ -81,6 +84,29 @@ class ClaimDecisionForm(forms.Form):
return cleaned 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): class UserManagementForm(forms.Form):
username = forms.CharField(max_length=150, label=_("Användarnamn")) username = forms.CharField(max_length=150, label=_("Användarnamn"))
email = forms.EmailField(required=False, label=_("E-post")) email = forms.EmailField(required=False, label=_("E-post"))

View File

@@ -122,6 +122,8 @@ class ClaimLog(models.Model):
CREATED = "created", _("Submitted") CREATED = "created", _("Submitted")
STATUS_CHANGED = "status_changed", _("Status changed") STATUS_CHANGED = "status_changed", _("Status changed")
MARKED_PAID = "marked_paid", _("Marked as paid") 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) claim = models.ForeignKey(Claim, related_name="logs", on_delete=models.CASCADE)
action = models.CharField(max_length=32, choices=Action.choices) action = models.CharField(max_length=32, choices=Action.choices)
@@ -147,4 +149,3 @@ class ClaimLog(models.Model):
def __str__(self): def __str__(self):
return f"{self.get_action_display()} ({self.created_at:%Y-%m-%d %H:%M})" return f"{self.get_action_display()} ({self.created_at:%Y-%m-%d %H:%M})"

View File

@@ -91,5 +91,6 @@
{% endif %} {% endif %}
{% block content %}{% endblock %} {% block content %}{% endblock %}
</main> </main>
{% block modals %}{% endblock %}
</body> </body>
</html> </html>

View File

@@ -135,6 +135,13 @@
<span class="text-xs text-gray-500">{% trans "Ej markerad som betald" %}</span> <span class="text-xs text-gray-500">{% trans "Ej markerad som betald" %}</span>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if can_change and claim.status == 'pending' %}
<button type="button"
data-open-edit="{{ claim.id }}"
class="rounded-full border border-gray-300 px-3 py-1 text-xs font-semibold text-gray-700 transition hover:bg-gray-100">
{% trans "Redigera" %}
</button>
{% endif %}
</div> </div>
</div> </div>
@@ -339,10 +346,76 @@
</div> </div>
</section> </section>
<script> <script>
(function () {
function lockBodyScroll() {
document.body.classList.add("overflow-hidden");
}
function unlockBodyScrollIfNeeded() {
const anyOpen = Array.from(document.querySelectorAll("[data-edit-panel]")).some(
(panel) => !panel.classList.contains("hidden")
);
if (!anyOpen) {
document.body.classList.remove("overflow-hidden");
}
}
function openPanel(id) {
const panel = document.querySelector(`[data-edit-panel="${id}"]`);
if (!panel) return;
panel.classList.remove("hidden");
panel.classList.add("flex");
panel.setAttribute("aria-hidden", "false");
lockBodyScroll();
}
function closePanelElement(panel) {
panel.classList.add("hidden");
panel.classList.remove("flex");
panel.setAttribute("aria-hidden", "true");
unlockBodyScrollIfNeeded();
}
document.addEventListener("click", (event) => {
const backdrop = event.target.closest("[data-edit-backdrop]");
if (backdrop && event.target === backdrop) {
closePanelElement(backdrop);
}
});
document.addEventListener("keydown", (event) => {
if (event.key === "Escape") {
document.querySelectorAll("[data-edit-panel]").forEach((panel) => {
if (!panel.classList.contains("hidden")) {
closePanelElement(panel);
}
});
}
});
document.addEventListener("DOMContentLoaded", () => { document.addEventListener("DOMContentLoaded", () => {
const editButtons = Array.from(document.querySelectorAll("[data-open-edit]"));
editButtons.forEach((button) => {
button.addEventListener("click", (event) => {
event.preventDefault();
openPanel(button.dataset.openEdit);
});
});
document.querySelectorAll("[data-close-edit]").forEach((button) => {
button.addEventListener("click", (event) => {
event.preventDefault();
const panel = button.closest("[data-edit-panel]");
if (panel) {
closePanelElement(panel);
}
});
});
const filterButtons = Array.from(document.querySelectorAll("[data-filter-button]")); const filterButtons = Array.from(document.querySelectorAll("[data-filter-button]"));
const cards = Array.from(document.querySelectorAll("[data-claim-card]")); const cards = Array.from(document.querySelectorAll("[data-claim-card]"));
const emptyState = document.querySelector("[data-claim-empty]"); const emptyState = document.querySelector("[data-claim-empty]");
if (!filterButtons.length || !cards.length) { if (!filterButtons.length || !cards.length) {
return; return;
} }
@@ -407,5 +480,90 @@ document.addEventListener("DOMContentLoaded", () => {
const initialFilter = new URLSearchParams(window.location.search).get("status") || "all"; const initialFilter = new URLSearchParams(window.location.search).get("status") || "all";
applyFilter(initialFilter); applyFilter(initialFilter);
}); });
})();
</script> </script>
{% endblock %} {% endblock %}
{% block modals %}
{{ block.super }}
{% if can_change %}
{% for claim in claims %}
{% if claim.status == 'pending' %}
<div class="fixed inset-0 z-40 hidden items-center justify-center bg-slate-900/80 p-4"
data-edit-panel="{{ claim.id }}"
data-edit-backdrop="{{ claim.id }}"
aria-hidden="true"
role="dialog"
aria-modal="true">
<div class="w-full max-w-2xl rounded-3xl bg-white p-6 text-left shadow-2xl">
<div class="flex items-center justify-between">
<div>
<p class="text-xs font-semibold uppercase tracking-wide text-gray-500">{% trans "Redigera utlägg" %}</p>
<h3 class="text-xl font-semibold text-gray-900">{{ claim.full_name }}</h3>
</div>
<button type="button"
data-close-edit
class="rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-600 transition hover:bg-gray-200">
{% trans "Stäng" %}
</button>
</div>
<form method="post" class="mt-4 space-y-4">
{% csrf_token %}
<input type="hidden" name="action_type" value="edit">
<input type="hidden" name="edit_claim_id" value="{{ claim.id }}">
<div class="grid gap-4 md:grid-cols-2">
<label class="text-sm font-medium text-gray-700">
{% trans "Namn" %}
<input type="text" name="full_name" value="{{ claim.full_name }}" class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-900 focus:border-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-600" required>
</label>
<label class="text-sm font-medium text-gray-700">
{% trans "E-post" %}
<input type="email" name="email" value="{{ claim.email }}" class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-900 focus:border-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-600" required>
</label>
<label class="text-sm font-medium text-gray-700">
{% trans "Kontonummer" %}
<input type="text" name="account_number" value="{{ claim.account_number }}" class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-900 focus:border-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-600" required>
</label>
<label class="text-sm font-medium text-gray-700">
{% trans "Belopp" %}
<input type="number" step="0.01" name="amount" value="{{ claim.amount }}" class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-900 focus:border-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-600" required>
</label>
<label class="text-sm font-medium text-gray-700">
{% trans "Valuta" %}
<select name="currency" class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-900 focus:border-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-600">
{% for value, label in currency_choices %}
<option value="{{ value }}"{% if claim.currency == value %} selected{% endif %}>{{ label }}</option>
{% endfor %}
</select>
</label>
<label class="text-sm font-medium text-gray-700">
{% trans "Evenemang/Projekt" %}
<select name="project" class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-900 focus:border-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-600">
<option value="">{% trans "Ingen" %}</option>
{% for project in project_options %}
<option value="{{ project.id }}"{% if claim.project and project.id == claim.project.id %} selected{% endif %}>{{ project }}</option>
{% endfor %}
</select>
</label>
</div>
<div>
<label class="text-sm font-medium text-gray-700" for="edit-description-{{ claim.id }}">{% trans "Beskrivning" %}</label>
<textarea id="edit-description-{{ claim.id }}" name="description" rows="4" class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-900 focus:border-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-600">{{ claim.description }}</textarea>
</div>
<div class="flex items-center justify-end gap-3">
<button type="button"
data-close-edit
class="rounded-full border border-gray-300 px-4 py-2 text-sm font-semibold text-gray-600 transition hover:bg-gray-100">
{% trans "Avbryt" %}
</button>
<button type="submit" class="rounded-full bg-brand-600 px-4 py-2 text-sm font-semibold text-white transition hover:bg-brand-700">
{% trans "Spara ändringar" %}
</button>
</div>
</form>
</div>
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endblock %}

View File

@@ -8,7 +8,8 @@ from django.test import TestCase, override_settings
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from .models import Claim from .forms import ClaimDecisionForm
from .models import Claim, ClaimLog, Project
from .validators import validate_receipt_file from .validators import validate_receipt_file
from .views import SubmitClaimView from .views import SubmitClaimView
@@ -79,7 +80,8 @@ class DashboardViewTests(TestCase):
User = get_user_model() User = get_user_model()
self.user = User.objects.create_user(username="admin", password="test123", email="admin@example.com") self.user = User.objects.create_user(username="admin", password="test123", email="admin@example.com")
view_perm = Permission.objects.get(codename="view_claim") view_perm = Permission.objects.get(codename="view_claim")
self.user.user_permissions.add(view_perm) change_perm = Permission.objects.get(codename="change_claim")
self.user.user_permissions.add(view_perm, change_perm)
self.client.force_login(self.user) self.client.force_login(self.user)
def _create_claim(self, **kwargs): def _create_claim(self, **kwargs):
@@ -122,3 +124,76 @@ class DashboardViewTests(TestCase):
self._create_claim(status=Claim.Status.PENDING) self._create_claim(status=Claim.Status.PENDING)
response = self.client.get(reverse("claims:admin-list") + "?status=approved") response = self.client.get(reverse("claims:admin-list") + "?status=approved")
self.assertFalse(response.context["has_filtered_claims"]) self.assertFalse(response.context["has_filtered_claims"])
def test_attester_can_reset_claim_to_pending(self):
claim = self._create_claim(status=Claim.Status.APPROVED)
response = self.client.post(
reverse("claims:admin-list"),
{
"action_type": "decision",
"claim_id": claim.id,
"action": ClaimDecisionForm.ACTION_PENDING,
"decision_note": "Behöver komplettering",
},
follow=True,
)
self.assertEqual(response.status_code, 200)
claim.refresh_from_db()
self.assertEqual(claim.status, Claim.Status.PENDING)
log = claim.logs.filter(action=ClaimLog.Action.STATUS_CHANGED).first()
self.assertIsNotNone(log)
self.assertEqual(log.from_status, Claim.Status.APPROVED)
self.assertEqual(log.to_status, Claim.Status.PENDING)
def test_attester_can_edit_details(self):
project = Project.objects.create(name="Event", is_active=True)
claim = self._create_claim(project=project, amount=100)
response = self.client.post(
reverse("claims:admin-list"),
{
"action_type": "edit",
"edit_claim_id": claim.id,
"full_name": "Changed Name",
"email": "changed@example.com",
"account_number": "789-000",
"amount": "555.55",
"currency": Claim.Currency.EUR,
"project": "",
"description": "Updated description",
},
follow=True,
)
self.assertEqual(response.status_code, 200)
claim.refresh_from_db()
self.assertEqual(claim.full_name, "Changed Name")
self.assertEqual(claim.email, "changed@example.com")
self.assertEqual(claim.currency, Claim.Currency.EUR)
self.assertIsNone(claim.project)
edit_log = claim.logs.filter(action=ClaimLog.Action.DETAILS_EDITED).first()
self.assertIsNotNone(edit_log)
self.assertIn("Namn", edit_log.note)
self.assertIn("Changed Name", edit_log.note)
def test_edit_blocked_for_non_pending_claims(self):
claim = self._create_claim(status=Claim.Status.APPROVED)
response = self.client.post(
reverse("claims:admin-list"),
{
"action_type": "edit",
"edit_claim_id": claim.id,
"full_name": "Blocked",
"email": "blocked@example.com",
"account_number": "456",
"amount": "200",
"currency": Claim.Currency.SEK,
"project": "",
"description": "Blocked edit",
},
follow=True,
)
self.assertEqual(response.status_code, 200)
claim.refresh_from_db()
self.assertNotEqual(claim.full_name, "Blocked")
self.assertFalse(claim.logs.filter(action=ClaimLog.Action.DETAILS_EDITED).exists())

View File

@@ -17,6 +17,7 @@ from django.views.generic import ListView, TemplateView
from .forms import ( from .forms import (
ClaimDecisionForm, ClaimDecisionForm,
ClaimEditForm,
ClaimLineForm, ClaimLineForm,
ClaimantForm, ClaimantForm,
DeleteUserForm, DeleteUserForm,
@@ -24,7 +25,7 @@ from .forms import (
UserPermissionForm, UserPermissionForm,
) )
from .email_utils import notify_admin_of_claim, send_claimant_confirmation_email from .email_utils import notify_admin_of_claim, send_claimant_confirmation_email
from .models import Claim, ClaimLog from .models import Claim, ClaimLog, Project
User = get_user_model() User = get_user_model()
@@ -161,6 +162,8 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
context["can_change"] = self.request.user.has_perm("claims.change_claim") context["can_change"] = self.request.user.has_perm("claims.change_claim")
context["payments_enabled"] = getattr(settings, "CLAIMS_ENABLE_INTERNAL_PAYMENTS", False) context["payments_enabled"] = getattr(settings, "CLAIMS_ENABLE_INTERNAL_PAYMENTS", False)
context["summary"] = self._build_summary() 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_any_claims"] = context["summary"]["total_claims"] > 0
context["has_filtered_claims"] = self._has_filtered_claims(context["status_filter"], context["summary"]) context["has_filtered_claims"] = self._has_filtered_claims(context["status_filter"], context["summary"])
context["recent_claims"] = ( context["recent_claims"] = (
@@ -174,6 +177,8 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
action_type = request.POST.get("action_type", "decision") action_type = request.POST.get("action_type", "decision")
if action_type == "payment": if action_type == "payment":
return self._handle_payment(request) return self._handle_payment(request)
if action_type == "edit":
return self._handle_edit(request)
return self._handle_decision(request) return self._handle_decision(request)
def _handle_decision(self, request): def _handle_decision(self, request):
@@ -196,15 +201,26 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
return redirect(request.get_full_path()) return redirect(request.get_full_path())
previous_status = claim.status previous_status = claim.status
claim.decision_note = decision_note claim.decision_note = decision_note
if action == ClaimDecisionForm.ACTION_APPROVE: if action == ClaimDecisionForm.ACTION_APPROVE:
claim.status = Claim.Status.APPROVED target_status = Claim.Status.APPROVED
messages.success(request, _("%(claim)s markerades som godkänd.") % {"claim": claim}) feedback = messages.success
feedback_msg = _("%(claim)s markerades som godkänd.")
elif action == ClaimDecisionForm.ACTION_REJECT:
target_status = Claim.Status.REJECTED
feedback = messages.warning
feedback_msg = _("%(claim)s markerades som nekad.")
else: else:
claim.status = Claim.Status.REJECTED target_status = Claim.Status.PENDING
messages.warning(request, _("%(claim)s markerades som nekad.") % {"claim": claim}) feedback = messages.info
feedback_msg = _("%(claim)s återställdes till väntande status.")
claim.save(update_fields=["status", "decision_note", "updated_at"]) status_changed = previous_status != target_status
update_fields = ["decision_note", "updated_at"]
if status_changed:
claim.status = target_status
update_fields.append("status")
claim.save(update_fields=update_fields)
feedback(request, feedback_msg % {"claim": claim})
claim.add_log( claim.add_log(
action=ClaimLog.Action.STATUS_CHANGED, action=ClaimLog.Action.STATUS_CHANGED,
performed_by=request.user, performed_by=request.user,
@@ -241,6 +257,52 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
messages.success(request, _("%(claim)s markerades som betald.") % {"claim": claim}) messages.success(request, _("%(claim)s markerades som betald.") % {"claim": claim})
return redirect(request.get_full_path()) 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"))
if claim.status != Claim.Status.PENDING:
messages.error(request, _("Endast väntande utlägg kan redigeras via panelen."))
return redirect(request.get_full_path())
original_values = {}
for field in ClaimEditForm.Meta.fields:
original_values[field] = getattr(claim, field)
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()
def _format_value(value):
if value is None:
return "-"
return str(value)
change_notes = []
for field in form.changed_data:
label = form.fields[field].label or field
old_value = _format_value(original_values.get(field))
new_value = _format_value(getattr(updated_claim, field))
change_notes.append(f"{label}: {old_value}{new_value}")
if change_notes:
note = _("Följande fält uppdaterades: %(fields)s") % {"fields": "; ".join(change_notes)}
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): def _build_summary(self):
now = timezone.now() now = timezone.now()
last_week = now - timedelta(days=7) last_week = now - timedelta(days=7)

Binary file not shown.

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: claims-system 0.1\n" "Project-Id-Version: claims-system 0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-09 13:13+0100\n" "POT-Creation-Date: 2025-11-11 19:06+0000\n"
"PO-Revision-Date: 2025-11-08 23:40+0100\n" "PO-Revision-Date: 2025-11-08 23:40+0100\n"
"Last-Translator: ChatGPT <noreply@example.com>\n" "Last-Translator: ChatGPT <noreply@example.com>\n"
"Language-Team: English\n" "Language-Team: English\n"
@@ -12,33 +12,43 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: claims/forms.py:19 #: claims/forms.py:19 claims/forms.py:100
#: claims/templates/claims/dashboard.html:516
msgid "Namn" msgid "Namn"
msgstr "Name" msgstr "Name"
#: claims/forms.py:23 claims/forms.py:86 #: claims/forms.py:23 claims/forms.py:101 claims/forms.py:112
#: claims/templates/claims/dashboard.html:169 #: claims/templates/claims/dashboard.html:176
#: claims/templates/claims/dashboard.html:520
msgid "E-post" msgid "E-post"
msgstr "Email" msgstr "Email"
#: claims/forms.py:28 claims/templates/claims/dashboard.html:157 #: claims/forms.py:28 claims/forms.py:102
#: claims/templates/claims/dashboard.html:164
#: claims/templates/claims/dashboard.html:524
msgid "Kontonummer" msgid "Kontonummer"
msgstr "Account number" msgstr "Account number"
#: claims/forms.py:49 claims/templates/claims/dashboard.html:204 #: claims/forms.py:49 claims/forms.py:106
#: claims/templates/claims/dashboard.html:211
#: claims/templates/claims/dashboard.html:550
msgid "Beskrivning" msgid "Beskrivning"
msgstr "Description" msgstr "Description"
#: claims/forms.py:50 claims/templates/claims/dashboard.html:153 #: claims/forms.py:50 claims/forms.py:103
#: claims/templates/claims/dashboard.html:160
#: claims/templates/claims/dashboard.html:528
#: claims/templates/claims/my_claims.html:23 #: claims/templates/claims/my_claims.html:23
msgid "Belopp" msgid "Belopp"
msgstr "Amount" msgstr "Amount"
#: claims/forms.py:51 #: claims/forms.py:51 claims/forms.py:104
#: claims/templates/claims/dashboard.html:532
msgid "Valuta" msgid "Valuta"
msgstr "Currency" msgstr "Currency"
#: claims/forms.py:52 #: claims/forms.py:52 claims/forms.py:105
#: claims/templates/claims/dashboard.html:540
msgid "Evenemang/Projekt" msgid "Evenemang/Projekt"
msgstr "Project" msgstr "Project"
@@ -46,84 +56,85 @@ msgstr "Project"
msgid "Kvitto" msgid "Kvitto"
msgstr "Receipt" msgstr "Receipt"
#: claims/forms.py:64 #: claims/forms.py:65
msgid "Godkänn" msgid "Godkänn"
msgstr "Approve" msgstr "Approve"
#: claims/forms.py:65 #: claims/forms.py:66
msgid "Neka" msgid "Neka"
msgstr "Reject" msgstr "Reject"
#: claims/forms.py:72 claims/templates/claims/dashboard.html:126 #: claims/forms.py:67 claims/models.py:29
#: claims/templates/claims/dashboard.html:261 #: claims/templates/claims/dashboard.html:332
msgid "Kommentar"
msgstr "Comment"
#: claims/forms.py:80
msgid "Kommentar krävs när du nekar ett utlägg."
msgstr "A comment is required when you reject an expense."
#: claims/forms.py:85
msgid "Användarnamn"
msgstr "Username"
#: claims/forms.py:87
msgid "Förnamn"
msgstr "First name"
#: claims/forms.py:88
msgid "Efternamn"
msgstr "Last name"
#: claims/forms.py:89
msgid "Lösenord"
msgstr "Password"
#: claims/forms.py:90
msgid "Bekräfta lösenord"
msgstr "Confirm password"
#: claims/forms.py:91
msgid "Administratör (staff)"
msgstr "Administrator (staff)"
#: claims/forms.py:92
msgid "Ge behörighet att se utlägg"
msgstr "Allow viewing claims"
#: claims/forms.py:93
msgid "Ge behörighet att besluta utlägg"
msgstr "Allow deciding claims"
#: claims/forms.py:98
msgid "Användarnamnet är upptaget."
msgstr "That username is already taken."
#: claims/forms.py:104
msgid "Lösenorden matchar inte."
msgstr "Passwords do not match."
#: claims/forms.py:122 claims/templates/claims/user_management.html:116
msgid "Admin/staff"
msgstr "Admin/staff"
#: claims/forms.py:123 claims/templates/claims/user_management.html:120
msgid "Får se utlägg"
msgstr "May view claims"
#: claims/forms.py:124 claims/templates/claims/user_management.html:124
msgid "Får besluta utlägg"
msgstr "May decide claims"
#: claims/models.py:29 claims/templates/claims/dashboard.html:325
msgid "Pending" msgid "Pending"
msgstr "Pending" msgstr "Pending"
#: claims/models.py:30 claims/templates/claims/dashboard.html:329 #: claims/forms.py:75 claims/templates/claims/dashboard.html:126
#: claims/templates/claims/dashboard.html:268
msgid "Kommentar"
msgstr "Comment"
#: claims/forms.py:83
msgid "Kommentar krävs när du nekar ett utlägg."
msgstr "A comment is required when you reject an expense."
#: claims/forms.py:111
msgid "Användarnamn"
msgstr "Username"
#: claims/forms.py:113
msgid "Förnamn"
msgstr "First name"
#: claims/forms.py:114
msgid "Efternamn"
msgstr "Last name"
#: claims/forms.py:115
msgid "Lösenord"
msgstr "Password"
#: claims/forms.py:116
msgid "Bekräfta lösenord"
msgstr "Confirm password"
#: claims/forms.py:117
msgid "Administratör (staff)"
msgstr "Administrator (staff)"
#: claims/forms.py:118
msgid "Ge behörighet att se utlägg"
msgstr "Allow viewing claims"
#: claims/forms.py:119
msgid "Ge behörighet att besluta utlägg"
msgstr "Allow deciding claims"
#: claims/forms.py:124
msgid "Användarnamnet är upptaget."
msgstr "That username is already taken."
#: claims/forms.py:130
msgid "Lösenorden matchar inte."
msgstr "Passwords do not match."
#: claims/forms.py:148 claims/templates/claims/user_management.html:116
msgid "Admin/staff"
msgstr "Admin/staff"
#: claims/forms.py:149 claims/templates/claims/user_management.html:120
msgid "Får se utlägg"
msgstr "May view claims"
#: claims/forms.py:150 claims/templates/claims/user_management.html:124
msgid "Får besluta utlägg"
msgstr "May decide claims"
#: claims/models.py:30 claims/templates/claims/dashboard.html:336
msgid "Approved" msgid "Approved"
msgstr "Approved" msgstr "Approved"
#: claims/models.py:31 claims/templates/claims/dashboard.html:333 #: claims/models.py:31 claims/templates/claims/dashboard.html:340
msgid "Rejected" msgid "Rejected"
msgstr "Rejected" msgstr "Rejected"
@@ -159,6 +170,14 @@ msgstr "Status changed"
msgid "Marked as paid" msgid "Marked as paid"
msgstr "Marked as paid" msgstr "Marked as paid"
#: claims/models.py:125
msgid "Project changed"
msgstr "Project changed"
#: claims/models.py:126
msgid "Details edited"
msgstr ""
#: claims/templates/claims/base.html:8 #: claims/templates/claims/base.html:8
msgid "Claims" msgid "Claims"
msgstr "Claims" msgstr "Claims"
@@ -241,7 +260,9 @@ msgstr "Track inflow, decisions, and payouts and act on claims immediately."
msgid "" msgid ""
"Tips: använd filtren för att fokusera på specifika statusar eller projekt. " "Tips: använd filtren för att fokusera på specifika statusar eller projekt. "
"Dashboarden uppdateras i realtid när data ändras." "Dashboarden uppdateras i realtid när data ändras."
msgstr "Tip: use the filters to focus on statuses or projects. The dashboard updates in real time." msgstr ""
"Tip: use the filters to focus on statuses or projects. The dashboard updates "
"in real time."
#: claims/templates/claims/dashboard.html:21 #: claims/templates/claims/dashboard.html:21
msgid "Totalt antal utlägg" msgid "Totalt antal utlägg"
@@ -316,7 +337,7 @@ msgid "Alla"
msgstr "All" msgstr "All"
#: claims/templates/claims/dashboard.html:106 #: claims/templates/claims/dashboard.html:106
#: claims/templates/claims/dashboard.html:165 #: claims/templates/claims/dashboard.html:172
msgid "Skapad" msgid "Skapad"
msgstr "Created" msgstr "Created"
@@ -349,26 +370,32 @@ msgstr "by"
msgid "Ej markerad som betald" msgid "Ej markerad som betald"
msgstr "Not marked as paid" msgstr "Not marked as paid"
#: claims/templates/claims/dashboard.html:145 #: claims/templates/claims/dashboard.html:142
msgid "Redigera"
msgstr "Edit"
#: claims/templates/claims/dashboard.html:152
msgid "Utbetalningsdetaljer" msgid "Utbetalningsdetaljer"
msgstr "Payout details" msgstr "Payout details"
#: claims/templates/claims/dashboard.html:161 #: claims/templates/claims/dashboard.html:168
msgid "Referens (Claim ID)" msgid "Referens (Claim ID)"
msgstr "Reference (Claim ID)" msgstr "Reference (Claim ID)"
#: claims/templates/claims/dashboard.html:173 #: claims/templates/claims/dashboard.html:180
#: claims/templates/claims/my_claims.html:24 #: claims/templates/claims/my_claims.html:24
msgid "Projekt" msgid "Projekt"
msgstr "Project" msgstr "Project"
#: claims/templates/claims/dashboard.html:177 #: claims/templates/claims/dashboard.html:184
msgid "" msgid ""
"Använd referensen och beloppet när du lägger upp betalningen hjälper att " "Använd referensen och beloppet när du lägger upp betalningen hjälper att "
"undvika dubbletter." "undvika dubbletter."
msgstr "Use the reference and amount when entering the payment it helps avoid duplicates." msgstr ""
"Use the reference and amount when entering the payment it helps avoid "
"duplicates."
#: claims/templates/claims/dashboard.html:182 #: claims/templates/claims/dashboard.html:189
msgid "" msgid ""
"Är du säker på att du har lagt upp betalningen? Markera endast som betald om " "Är du säker på att du har lagt upp betalningen? Markera endast som betald om "
"beloppet skickas till banken." "beloppet skickas till banken."
@@ -376,17 +403,15 @@ msgstr ""
"Are you sure the payment has been scheduled? Only mark as paid if the amount " "Are you sure the payment has been scheduled? Only mark as paid if the amount "
"has been sent to the bank." "has been sent to the bank."
#: claims/templates/claims/dashboard.html:187 #: claims/templates/claims/dashboard.html:194
#, fuzzy
#| msgid "Markerad som betald"
msgid "Markera som betald" msgid "Markera som betald"
msgstr "Marked as paid" msgstr "Mark as paid"
#: claims/templates/claims/dashboard.html:190 #: claims/templates/claims/dashboard.html:197
msgid "Dubbelkolla belopp och kontonummer i panelen innan du bekräftar." msgid "Dubbelkolla belopp och kontonummer i panelen innan du bekräftar."
msgstr "Double-check the amount and account number before confirming." msgstr "Double-check the amount and account number before confirming."
#: claims/templates/claims/dashboard.html:195 #: claims/templates/claims/dashboard.html:202
msgid "" msgid ""
"Intern betalningshantering är av markera betalning i ekonomisystemet och " "Intern betalningshantering är av markera betalning i ekonomisystemet och "
"resetta status vid behov." "resetta status vid behov."
@@ -394,86 +419,106 @@ msgstr ""
"Internal payment handling is off register the payment in the finance " "Internal payment handling is off register the payment in the finance "
"system and reset the status if needed." "system and reset the status if needed."
#: claims/templates/claims/dashboard.html:212 #: claims/templates/claims/dashboard.html:219
msgid "Visa kvitto" msgid "Visa kvitto"
msgstr "View receipt" msgstr "View receipt"
#: claims/templates/claims/dashboard.html:215 #: claims/templates/claims/dashboard.html:222
msgid "Inget kvitto bifogat" msgid "Inget kvitto bifogat"
msgstr "No receipt attached" msgstr "No receipt attached"
#: claims/templates/claims/dashboard.html:217 #: claims/templates/claims/dashboard.html:224
msgid "Senast uppdaterad" msgid "Senast uppdaterad"
msgstr "Last updated" msgstr "Last updated"
#: claims/templates/claims/dashboard.html:222 #: claims/templates/claims/dashboard.html:229
msgid "Logg" msgid "Logg"
msgstr "Log" msgstr "Log"
#: claims/templates/claims/dashboard.html:229 #: claims/templates/claims/dashboard.html:236
#: claims/templates/claims/my_claims.html:62 #: claims/templates/claims/my_claims.html:62
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: claims/templates/claims/dashboard.html:235 #: claims/templates/claims/dashboard.html:242
msgid "Av" msgid "Av"
msgstr "By" msgstr "By"
#: claims/templates/claims/dashboard.html:239 #: claims/templates/claims/dashboard.html:246
#: claims/templates/claims/my_claims.html:69 #: claims/templates/claims/my_claims.html:69
msgid "Ingen logg än." msgid "Ingen logg än."
msgstr "No log entries yet." msgstr "No log entries yet."
#: claims/templates/claims/dashboard.html:247 #: claims/templates/claims/dashboard.html:254
msgid "" msgid ""
"Utlägget är markerat som betalt. Ändringar av beslut/kommentar är låsta." "Utlägget är markerat som betalt. Ändringar av beslut/kommentar är låsta."
msgstr "The claim is marked as paid. Decision/comments are locked." msgstr "The claim is marked as paid. Decision/comments are locked."
#: claims/templates/claims/dashboard.html:254 #: claims/templates/claims/dashboard.html:261
msgid "Åtgärd" msgid "Åtgärd"
msgstr "Action" msgstr "Action"
#: claims/templates/claims/dashboard.html:266 #: claims/templates/claims/dashboard.html:273
msgid "Uppdatera beslut" msgid "Uppdatera beslut"
msgstr "Update decision" msgstr "Update decision"
#: claims/templates/claims/dashboard.html:277 #: claims/templates/claims/dashboard.html:284
#: claims/templates/claims/my_claims.html:78 #: claims/templates/claims/my_claims.html:78
msgid "Inga utlägg ännu" msgid "Inga utlägg ännu"
msgstr "No claims yet" msgstr "No claims yet"
#: claims/templates/claims/dashboard.html:278 #: claims/templates/claims/dashboard.html:285
msgid "När formuläret tas emot visas posterna automatiskt här." msgid "När formuläret tas emot visas posterna automatiskt här."
msgstr "As soon as submissions arrive they will appear here." msgstr "As soon as submissions arrive they will appear here."
#: claims/templates/claims/dashboard.html:284 #: claims/templates/claims/dashboard.html:291
msgid "Inga utlägg matchar filtret" msgid "Inga utlägg matchar filtret"
msgstr "No claims match the filter" msgstr "No claims match the filter"
#: claims/templates/claims/dashboard.html:285 #: claims/templates/claims/dashboard.html:292
msgid "Välj en annan status för att se fler poster." msgid "Välj en annan status för att se fler poster."
msgstr "Choose another status to see more entries." msgstr "Choose another status to see more entries."
#: claims/templates/claims/dashboard.html:293 #: claims/templates/claims/dashboard.html:300
msgid "Senaste inskick" msgid "Senaste inskick"
msgstr "Latest submissions" msgstr "Latest submissions"
#: claims/templates/claims/dashboard.html:294 #: claims/templates/claims/dashboard.html:301
msgid "Aktivitet" msgid "Aktivitet"
msgstr "Activity" msgstr "Activity"
#: claims/templates/claims/dashboard.html:312 #: claims/templates/claims/dashboard.html:319
msgid "Inga aktiviteter än." msgid "Inga aktiviteter än."
msgstr "No activity yet." msgstr "No activity yet."
#: claims/templates/claims/dashboard.html:320 #: claims/templates/claims/dashboard.html:327
msgid "Statusfördelning" msgid "Statusfördelning"
msgstr "Status breakdown" msgstr "Status breakdown"
#: claims/templates/claims/dashboard.html:321 #: claims/templates/claims/dashboard.html:328
msgid "Snabbstatistik" msgid "Snabbstatistik"
msgstr "Quick stats" msgstr "Quick stats"
#: claims/templates/claims/dashboard.html:501
msgid "Redigera utlägg"
msgstr "Edit claim"
#: claims/templates/claims/dashboard.html:507
msgid "Stäng"
msgstr "Close"
#: claims/templates/claims/dashboard.html:542
msgid "Ingen"
msgstr "None"
#: claims/templates/claims/dashboard.html:557
msgid "Avbryt"
msgstr "Cancel"
#: claims/templates/claims/dashboard.html:560
msgid "Spara ändringar"
msgstr "Save changes"
#: claims/templates/claims/export_placeholder.html:8 #: claims/templates/claims/export_placeholder.html:8
msgid "Export till redovisningssystem" msgid "Export till redovisningssystem"
msgstr "Export to bookkeeping system" msgstr "Export to bookkeeping system"
@@ -814,100 +859,117 @@ msgstr ""
msgid "Filens innehåll matchar inte förväntat format." msgid "Filens innehåll matchar inte förväntat format."
msgstr "" msgstr ""
#: claims/views.py:126 #: claims/views.py:127
#, python-brace-format #, python-brace-format
msgid "{} utlägg skickade in." msgid "{} utlägg skickade in."
msgstr "" msgstr ""
#: claims/views.py:129 #: claims/views.py:130
msgid "Inga utlägg kunde sparas. Fyll i minst en rad." msgid "Inga utlägg kunde sparas. Fyll i minst en rad."
msgstr "" msgstr ""
#: claims/views.py:131 #: claims/views.py:132
msgid "Kunde inte spara utläggen. Kontrollera formuläret." msgid "Kunde inte spara utläggen. Kontrollera formuläret."
msgstr "" msgstr ""
#: claims/views.py:181 claims/views.py:222 #: claims/views.py:186 claims/views.py:238 claims/views.py:262
#, fuzzy #, fuzzy
#| msgid "Ge behörighet att besluta utlägg" #| msgid "Ge behörighet att besluta utlägg"
msgid "Du har inte behörighet att uppdatera utlägg." msgid "Du har inte behörighet att uppdatera utlägg."
msgstr "Allow deciding claims" msgstr "Allow deciding claims"
#: claims/views.py:195 #: claims/views.py:200
#, fuzzy
#| msgid ""
#| "Utlägget är markerat som betalt. Ändringar av beslut/kommentar är låsta."
msgid "Utlägget är redan markerat som betalt och kan inte ändras." msgid "Utlägget är redan markerat som betalt och kan inte ändras."
msgstr "The claim is marked as paid. Decision/comments are locked." msgstr "This claim is already marked as paid and cannot be changed."
#: claims/views.py:202 #: claims/views.py:207
#, python-format #, python-format
msgid "%(claim)s markerades som godkänd." msgid "%(claim)s markerades som godkänd."
msgstr "" msgstr "%(claim)s was marked as approved."
#: claims/views.py:205 #: claims/views.py:211
#, fuzzy, python-format #, python-format
#| msgid "Ej markerad som betald"
msgid "%(claim)s markerades som nekad." msgid "%(claim)s markerades som nekad."
msgstr "Not marked as paid" msgstr "%(claim)s was marked as rejected."
#: claims/views.py:219 #: claims/views.py:215
#, python-format
msgid "%(claim)s återställdes till väntande status."
msgstr "%(claim)s was reset to pending status."
#: claims/views.py:235
msgid "Betalningshantering är inte aktiverad." msgid "Betalningshantering är inte aktiverad."
msgstr "" msgstr "Payment handling is not enabled."
#: claims/views.py:227 #: claims/views.py:243
msgid "Endast godkända utlägg kan markeras som betalda." msgid "Endast godkända utlägg kan markeras som betalda."
msgstr "" msgstr "Only approved claims can be marked as paid."
#: claims/views.py:230 #: claims/views.py:246
msgid "Detta utlägg är redan markerat som betalt." msgid "Detta utlägg är redan markerat som betalt."
msgstr "" msgstr "This claim is already marked as paid."
#: claims/views.py:241 #: claims/views.py:257
#, fuzzy, python-format #, python-format
#| msgid "Ej markerad som betald"
msgid "%(claim)s markerades som betald." msgid "%(claim)s markerades som betald."
msgstr "Not marked as paid" msgstr "%(claim)s was marked as paid."
#: claims/views.py:307 #: claims/views.py:266
msgid "Endast väntande utlägg kan redigeras via panelen."
msgstr "Only pending claims can be edited via the panel."
#: claims/views.py:295
#, python-format
msgid "Följande fält uppdaterades: %(fields)s"
msgstr "The following fields were updated: %(fields)s"
#: claims/views.py:301
msgid "Informationen uppdaterades."
msgstr "Information updated."
#: claims/views.py:303
msgid "Inga förändringar att spara."
msgstr "No changes to save."
#: claims/views.py:369
msgid "Du saknar behörighet för åtgärden." msgid "Du saknar behörighet för åtgärden."
msgstr "" msgstr "You do not have permission to perform this action."
#: claims/views.py:354 #: claims/views.py:416
#, python-format #, python-format
msgid "Användaren %(user)s skapades." msgid "Användaren %(user)s skapades."
msgstr "" msgstr ""
#: claims/views.py:365 #: claims/views.py:427
msgid "Du kan inte ta bort din egen staff-status." msgid "Du kan inte ta bort din egen staff-status."
msgstr "" msgstr ""
#: claims/views.py:371 #: claims/views.py:433
#, python-format #, python-format
msgid "Behörigheter uppdaterades för %(user)s." msgid "Behörigheter uppdaterades för %(user)s."
msgstr "" msgstr ""
#: claims/views.py:373 #: claims/views.py:435
#, fuzzy #, fuzzy
#| msgid "Justera behörigheter" #| msgid "Justera behörigheter"
msgid "Kunde inte uppdatera behörigheter." msgid "Kunde inte uppdatera behörigheter."
msgstr "Adjust permissions" msgstr "Adjust permissions"
#: claims/views.py:383 #: claims/views.py:445
msgid "Du kan inte ta bort ditt eget konto." msgid "Du kan inte ta bort ditt eget konto."
msgstr "" msgstr ""
#: claims/views.py:385 #: claims/views.py:447
msgid "Du kan inte ta bort en superuser via detta gränssnitt." msgid "Du kan inte ta bort en superuser via detta gränssnitt."
msgstr "" msgstr ""
#: claims/views.py:388 #: claims/views.py:450
#, fuzzy #, fuzzy
#| msgid "Användare" #| msgid "Användare"
msgid "Användaren togs bort." msgid "Användaren togs bort."
msgstr "Users" msgstr "Users"
#: claims/views.py:391 #: claims/views.py:453
msgid "Okänd åtgärd." msgid "Okänd åtgärd."
msgstr "" msgstr ""
@@ -957,6 +1019,19 @@ msgstr "Use your admin credentials to manage claims."
msgid "Behöver du ett konto? Kontakta en superuser i organisationen." msgid "Behöver du ett konto? Kontakta en superuser i organisationen."
msgstr "Need an account? Contact a superuser in your organization." msgstr "Need an account? Contact a superuser in your organization."
#~ msgid "Behåll nuvarande"
#~ msgstr "Keep current"
#~ msgid "Justera projekt om underlaget skickats in mot fel evenemang."
#~ msgstr ""
#~ "Adjust the project if the submission was sent against the wrong event."
#~ msgid "Aktivera JavaScript för att kunna redigera uppgifter direkt här."
#~ msgstr "Enable JavaScript to edit the information directly here."
#~ msgid "Project updated during decision."
#~ msgstr "Project updated during decision."
#~ msgid "Admin Utlägg" #~ msgid "Admin Utlägg"
#~ msgstr "Admin Claims" #~ msgstr "Admin Claims"

Binary file not shown.

View File

@@ -0,0 +1,984 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-11 19:06+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: claims/forms.py:19 claims/forms.py:100
#: claims/templates/claims/dashboard.html:516
msgid "Namn"
msgstr ""
#: claims/forms.py:23 claims/forms.py:101 claims/forms.py:112
#: claims/templates/claims/dashboard.html:176
#: claims/templates/claims/dashboard.html:520
msgid "E-post"
msgstr ""
#: claims/forms.py:28 claims/forms.py:102
#: claims/templates/claims/dashboard.html:164
#: claims/templates/claims/dashboard.html:524
msgid "Kontonummer"
msgstr ""
#: claims/forms.py:49 claims/forms.py:106
#: claims/templates/claims/dashboard.html:211
#: claims/templates/claims/dashboard.html:550
msgid "Beskrivning"
msgstr ""
#: claims/forms.py:50 claims/forms.py:103
#: claims/templates/claims/dashboard.html:160
#: claims/templates/claims/dashboard.html:528
#: claims/templates/claims/my_claims.html:23
msgid "Belopp"
msgstr ""
#: claims/forms.py:51 claims/forms.py:104
#: claims/templates/claims/dashboard.html:532
msgid "Valuta"
msgstr ""
#: claims/forms.py:52 claims/forms.py:105
#: claims/templates/claims/dashboard.html:540
msgid "Evenemang/Projekt"
msgstr ""
#: claims/forms.py:53 claims/templates/claims/my_claims.html:44
msgid "Kvitto"
msgstr ""
#: claims/forms.py:65
msgid "Godkänn"
msgstr "Godkänn"
#: claims/forms.py:66
msgid "Neka"
msgstr "Neka"
#: claims/forms.py:67 claims/models.py:29
#: claims/templates/claims/dashboard.html:332
msgid "Pending"
msgstr "Väntande"
#: claims/forms.py:75 claims/templates/claims/dashboard.html:126
#: claims/templates/claims/dashboard.html:268
msgid "Kommentar"
msgstr ""
#: claims/forms.py:83
msgid "Kommentar krävs när du nekar ett utlägg."
msgstr ""
#: claims/forms.py:111
msgid "Användarnamn"
msgstr ""
#: claims/forms.py:113
msgid "Förnamn"
msgstr ""
#: claims/forms.py:114
msgid "Efternamn"
msgstr ""
#: claims/forms.py:115
msgid "Lösenord"
msgstr ""
#: claims/forms.py:116
msgid "Bekräfta lösenord"
msgstr ""
#: claims/forms.py:117
msgid "Administratör (staff)"
msgstr ""
#: claims/forms.py:118
msgid "Ge behörighet att se utlägg"
msgstr ""
#: claims/forms.py:119
msgid "Ge behörighet att besluta utlägg"
msgstr ""
#: claims/forms.py:124
msgid "Användarnamnet är upptaget."
msgstr ""
#: claims/forms.py:130
msgid "Lösenorden matchar inte."
msgstr ""
#: claims/forms.py:148 claims/templates/claims/user_management.html:116
msgid "Admin/staff"
msgstr ""
#: claims/forms.py:149 claims/templates/claims/user_management.html:120
msgid "Får se utlägg"
msgstr ""
#: claims/forms.py:150 claims/templates/claims/user_management.html:124
msgid "Får besluta utlägg"
msgstr ""
#: claims/models.py:30 claims/templates/claims/dashboard.html:336
msgid "Approved"
msgstr "Godkänd"
#: claims/models.py:31 claims/templates/claims/dashboard.html:340
msgid "Rejected"
msgstr "Nekad"
#: claims/models.py:34
msgid "Swedish krona (SEK)"
msgstr ""
#: claims/models.py:35
msgid "Euro (EUR)"
msgstr ""
#: claims/models.py:36
msgid "US dollar (USD)"
msgstr ""
#: claims/models.py:37
msgid "British pound (GBP)"
msgstr ""
#: claims/models.py:54
msgid "Describe what the reimbursement is for"
msgstr ""
#: claims/models.py:122
msgid "Submitted"
msgstr ""
#: claims/models.py:123
msgid "Status changed"
msgstr ""
#: claims/models.py:124
msgid "Marked as paid"
msgstr ""
#: claims/models.py:125
msgid "Project changed"
msgstr ""
#: claims/models.py:126
msgid "Details edited"
msgstr ""
#: claims/templates/claims/base.html:8
msgid "Claims"
msgstr ""
#: claims/templates/claims/base.html:29
msgid "claims-system"
msgstr ""
#: claims/templates/claims/base.html:32
#: claims/templates/claims/submit_claim.html:4
msgid "Skicka utlägg"
msgstr ""
#: claims/templates/claims/base.html:37
msgid "Interna vyer"
msgstr ""
#: claims/templates/claims/base.html:43
msgid "Dashboard"
msgstr ""
#: claims/templates/claims/base.html:44
#: claims/templates/claims/my_claims.html:4
#: claims/templates/claims/my_claims.html:10
msgid "Mina utlägg"
msgstr ""
#: claims/templates/claims/base.html:46
msgid "Användare"
msgstr ""
#: claims/templates/claims/base.html:48
#: claims/templates/claims/export_placeholder.html:5
msgid "Export"
msgstr ""
#: claims/templates/claims/base.html:50
msgid "Django admin"
msgstr ""
#: claims/templates/claims/base.html:58
msgid "Språk"
msgstr ""
#: claims/templates/claims/base.html:69
msgid "Inloggad som"
msgstr ""
#: claims/templates/claims/base.html:73
msgid "Logga ut"
msgstr ""
#: claims/templates/claims/base.html:77
#: claims/templates/claims/submit_success.html:22
#: templates/registration/login.html:4 templates/registration/login.html:11
#: templates/registration/login.html:43
msgid "Logga in"
msgstr ""
#: claims/templates/claims/dashboard.html:4
msgid "Admin Dashboard"
msgstr ""
#: claims/templates/claims/dashboard.html:10
#: claims/templates/claims/my_claims.html:9
msgid "Översikt"
msgstr ""
#: claims/templates/claims/dashboard.html:11
msgid "Dashboard för utlägg"
msgstr ""
#: claims/templates/claims/dashboard.html:12
msgid ""
"Få koll på inflödet, beslutsläget och utbetalningar och hantera ärenden "
"direkt."
msgstr ""
#: claims/templates/claims/dashboard.html:15
msgid ""
"Tips: använd filtren för att fokusera på specifika statusar eller projekt. "
"Dashboarden uppdateras i realtid när data ändras."
msgstr ""
#: claims/templates/claims/dashboard.html:21
msgid "Totalt antal utlägg"
msgstr ""
#: claims/templates/claims/dashboard.html:23
msgid "Alla statusar"
msgstr ""
#: claims/templates/claims/dashboard.html:26
msgid "Senaste 7 dagarna"
msgstr ""
#: claims/templates/claims/dashboard.html:28
msgid "Nya inskick sedan en vecka"
msgstr ""
#: claims/templates/claims/dashboard.html:31
msgid "Pågående granskning"
msgstr ""
#: claims/templates/claims/dashboard.html:33
msgid "Behöver beslut"
msgstr ""
#: claims/templates/claims/dashboard.html:36
msgid "Redo för utbetalning"
msgstr ""
#: claims/templates/claims/dashboard.html:38
msgid "Godkända men ej markerade som betalda"
msgstr ""
#: claims/templates/claims/dashboard.html:44
msgid "Belopp att besluta"
msgstr ""
#: claims/templates/claims/dashboard.html:46
msgid "Summa av väntande utlägg (alla valutor)"
msgstr ""
#: claims/templates/claims/dashboard.html:49
msgid "Godkända belopp"
msgstr ""
#: claims/templates/claims/dashboard.html:51
msgid "Summa för alla godkända utlägg"
msgstr ""
#: claims/templates/claims/dashboard.html:54
msgid "Utbetalda belopp"
msgstr ""
#: claims/templates/claims/dashboard.html:56
msgid "Markerade som betalda"
msgstr ""
#: claims/templates/claims/dashboard.html:65
msgid "Filtrera"
msgstr ""
#: claims/templates/claims/dashboard.html:66
msgid "Hantera utlägg"
msgstr ""
#: claims/templates/claims/dashboard.html:67
msgid "Välj status för att fokusera listan nedan."
msgstr ""
#: claims/templates/claims/dashboard.html:75
msgid "Alla"
msgstr ""
#: claims/templates/claims/dashboard.html:106
#: claims/templates/claims/dashboard.html:172
msgid "Skapad"
msgstr ""
#: claims/templates/claims/dashboard.html:109
msgid "Person"
msgstr ""
#: claims/templates/claims/dashboard.html:112
msgid "Konto"
msgstr ""
#: claims/templates/claims/dashboard.html:114
msgid "Inloggad användare"
msgstr ""
#: claims/templates/claims/dashboard.html:116
msgid "Inskickad av gäst"
msgstr ""
#: claims/templates/claims/dashboard.html:131
#: claims/templates/claims/my_claims.html:33
msgid "Betald"
msgstr ""
#: claims/templates/claims/dashboard.html:132
msgid "av"
msgstr ""
#: claims/templates/claims/dashboard.html:135
msgid "Ej markerad som betald"
msgstr ""
#: claims/templates/claims/dashboard.html:142
msgid "Redigera"
msgstr ""
#: claims/templates/claims/dashboard.html:152
msgid "Utbetalningsdetaljer"
msgstr ""
#: claims/templates/claims/dashboard.html:168
msgid "Referens (Claim ID)"
msgstr ""
#: claims/templates/claims/dashboard.html:180
#: claims/templates/claims/my_claims.html:24
msgid "Projekt"
msgstr ""
#: claims/templates/claims/dashboard.html:184
msgid ""
"Använd referensen och beloppet när du lägger upp betalningen hjälper att "
"undvika dubbletter."
msgstr ""
#: claims/templates/claims/dashboard.html:189
msgid ""
"Är du säker på att du har lagt upp betalningen? Markera endast som betald om "
"beloppet skickas till banken."
msgstr ""
#: claims/templates/claims/dashboard.html:194
msgid "Markera som betald"
msgstr ""
#: claims/templates/claims/dashboard.html:197
msgid "Dubbelkolla belopp och kontonummer i panelen innan du bekräftar."
msgstr ""
#: claims/templates/claims/dashboard.html:202
msgid ""
"Intern betalningshantering är av markera betalning i ekonomisystemet och "
"resetta status vid behov."
msgstr ""
#: claims/templates/claims/dashboard.html:219
msgid "Visa kvitto"
msgstr ""
#: claims/templates/claims/dashboard.html:222
msgid "Inget kvitto bifogat"
msgstr ""
#: claims/templates/claims/dashboard.html:224
msgid "Senast uppdaterad"
msgstr ""
#: claims/templates/claims/dashboard.html:229
msgid "Logg"
msgstr ""
#: claims/templates/claims/dashboard.html:236
#: claims/templates/claims/my_claims.html:62
msgid "Status"
msgstr ""
#: claims/templates/claims/dashboard.html:242
msgid "Av"
msgstr ""
#: claims/templates/claims/dashboard.html:246
#: claims/templates/claims/my_claims.html:69
msgid "Ingen logg än."
msgstr ""
#: claims/templates/claims/dashboard.html:254
msgid ""
"Utlägget är markerat som betalt. Ändringar av beslut/kommentar är låsta."
msgstr ""
#: claims/templates/claims/dashboard.html:261
msgid "Åtgärd"
msgstr ""
#: claims/templates/claims/dashboard.html:273
msgid "Uppdatera beslut"
msgstr ""
#: claims/templates/claims/dashboard.html:284
#: claims/templates/claims/my_claims.html:78
msgid "Inga utlägg ännu"
msgstr ""
#: claims/templates/claims/dashboard.html:285
msgid "När formuläret tas emot visas posterna automatiskt här."
msgstr ""
#: claims/templates/claims/dashboard.html:291
msgid "Inga utlägg matchar filtret"
msgstr ""
#: claims/templates/claims/dashboard.html:292
msgid "Välj en annan status för att se fler poster."
msgstr ""
#: claims/templates/claims/dashboard.html:300
msgid "Senaste inskick"
msgstr ""
#: claims/templates/claims/dashboard.html:301
msgid "Aktivitet"
msgstr ""
#: claims/templates/claims/dashboard.html:319
msgid "Inga aktiviteter än."
msgstr ""
#: claims/templates/claims/dashboard.html:327
msgid "Statusfördelning"
msgstr ""
#: claims/templates/claims/dashboard.html:328
msgid "Snabbstatistik"
msgstr ""
#: claims/templates/claims/dashboard.html:501
msgid "Redigera utlägg"
msgstr ""
#: claims/templates/claims/dashboard.html:507
msgid "Stäng"
msgstr ""
#: claims/templates/claims/dashboard.html:542
msgid "Ingen"
msgstr ""
#: claims/templates/claims/dashboard.html:557
msgid "Avbryt"
msgstr ""
#: claims/templates/claims/dashboard.html:560
msgid "Spara ändringar"
msgstr ""
#: claims/templates/claims/export_placeholder.html:8
msgid "Export till redovisningssystem"
msgstr ""
#: claims/templates/claims/export_placeholder.html:9
msgid "Detta är ett framtida steg. Här kommer du att kunna:"
msgstr ""
#: claims/templates/claims/export_placeholder.html:11
msgid "Välja tidsperiod eller status"
msgstr ""
#: claims/templates/claims/export_placeholder.html:12
msgid "Exportera till t.ex. bankfil eller SIE"
msgstr ""
#: claims/templates/claims/export_placeholder.html:13
msgid "Skicka data via API till externa system"
msgstr ""
#: claims/templates/claims/export_placeholder.html:15
msgid "Planerade åtgärder:"
msgstr ""
#: claims/templates/claims/export_placeholder.html:17
msgid "Definiera format"
msgstr ""
#: claims/templates/claims/export_placeholder.html:18
msgid "Implementera exportkommando/API"
msgstr ""
#: claims/templates/claims/export_placeholder.html:19
msgid "Bygga integrationsinställningar"
msgstr ""
#: claims/templates/claims/export_placeholder.html:21
msgid ""
"Tills vidare kan du ladda ner data via Django admin eller med ett enkelt SQL-"
"utdrag."
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:7
msgid "Steg 2"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:8
msgid "Utläggsrader"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:9
msgid ""
"Lägg till ett block per kvitto eller kostnad. Projektväljaren hjälper "
"ekonomin att bokföra rätt."
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:13
#, python-format
msgid "Totalt <span data-current-count>%(current_forms)s</span> rader"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:22
msgid "justera"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:36
#, python-format
msgid "Utlägg %(forloop.counter)s"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:37
#: claims/templates/claims/includes/claim_formset.html:120
msgid "Obligatoriska fält markeras med *"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:76
#: claims/templates/claims/includes/claim_formset.html:150
msgid "Avancerat: justera valuta (standard SEK)"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:86
#: claims/templates/claims/includes/claim_formset.html:157
msgid "Använd detta om kvittot är i annan valuta än svenska kronor."
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:105
msgid ""
"När du skickar in skickas du vidare mot adminvyn. Saknar du inloggning får "
"du möjlighet att logga in."
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:108
msgid "Skicka in utlägg"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:119
msgid "Ny utläggsrad"
msgstr ""
#: claims/templates/claims/includes/claim_formset.html:164
msgid "PDF, JPG eller PNG max 10 MB."
msgstr ""
#: claims/templates/claims/my_claims.html:11
msgid "Här ser du status för de utlägg du skickat in när du varit inloggad."
msgstr ""
#: claims/templates/claims/my_claims.html:20
msgid "Skickad"
msgstr ""
#: claims/templates/claims/my_claims.html:21
#: claims/templates/claims/submit_claim.html:9
msgid "Utlägg"
msgstr ""
#: claims/templates/claims/my_claims.html:40
msgid "Detaljer"
msgstr ""
#: claims/templates/claims/my_claims.html:47
msgid "Visa fil"
msgstr ""
#: claims/templates/claims/my_claims.html:50
msgid "Inget kvitto bifogat."
msgstr ""
#: claims/templates/claims/my_claims.html:55
msgid "Visa logg"
msgstr ""
#: claims/templates/claims/my_claims.html:79
msgid ""
"Du har inte skickat in några utlägg ännu eller så gjordes de utan inloggning."
msgstr ""
#: claims/templates/claims/submit_claim.html:10
msgid "Skicka in dina kostnader"
msgstr ""
#: claims/templates/claims/submit_claim.html:18
msgid "Steg 1"
msgstr ""
#: claims/templates/claims/submit_claim.html:19
msgid "Dina uppgifter"
msgstr ""
#: claims/templates/claims/submit_claim.html:20
msgid ""
"Vi återkommer via dessa kontaktuppgifter och använder kontonumret för "
"utbetalning."
msgstr ""
#: claims/templates/claims/submit_success.html:5
msgid "Tack för ditt utlägg"
msgstr ""
#: claims/templates/claims/submit_success.html:10
msgid "Tack!"
msgstr ""
#: claims/templates/claims/submit_success.html:11
msgid "Utlägget är skickat"
msgstr ""
#: claims/templates/claims/submit_success.html:13
msgid ""
"Vi har tagit emot underlaget. Om du har fler kvitton kan du fylla i ett nytt "
"formulär direkt, annars kan du logga in för att följa statusen."
msgstr ""
#: claims/templates/claims/submit_success.html:18
msgid "Skicka nytt utlägg"
msgstr ""
#: claims/templates/claims/user_management.html:4
msgid "Användarhantering"
msgstr ""
#: claims/templates/claims/user_management.html:9
msgid "Konton & behörigheter"
msgstr ""
#: claims/templates/claims/user_management.html:10
msgid "Hantera användare"
msgstr ""
#: claims/templates/claims/user_management.html:12
msgid ""
"Skapa nya konton, justera rättigheter för claim-flödet och ta bort användare "
"som inte längre ska ha åtkomst."
msgstr ""
#: claims/templates/claims/user_management.html:15
msgid ""
"Notis: denna sida styr direkta behörigheter. Rättigheter via grupper eller "
"superuser-status gäller även om kryssrutorna avmarkeras."
msgstr ""
#: claims/templates/claims/user_management.html:22
msgid "Nytt konto"
msgstr ""
#: claims/templates/claims/user_management.html:23
#: claims/templates/claims/user_management.html:53
msgid "Skapa användare"
msgstr ""
#: claims/templates/claims/user_management.html:24
msgid "Lösenordet valideras mot Djangos standardregler."
msgstr ""
#: claims/templates/claims/user_management.html:59
msgid "Tips för kontohantering"
msgstr ""
#: claims/templates/claims/user_management.html:63
msgid ""
"Lägg användare i grupper via Django admin om flera personer ska dela samma "
"roll."
msgstr ""
#: claims/templates/claims/user_management.html:68
msgid ""
"Behörigheterna <code class=\"break-normal rounded bg-slate-800 px-2 py-1 "
"text-xs\">claims.view_claim</code>\n"
" och <code class=\"break-normal rounded bg-slate-800 "
"px-2 py-1 text-xs\">claims.change_claim</code>\n"
" styr åtkomst till adminvyn respektive beslutsflödet."
msgstr ""
#: claims/templates/claims/user_management.html:75
msgid ""
"En markerad Admin/staff-användare kan nå Django admin och skapa projekt, "
"exportflöden m.m."
msgstr ""
#: claims/templates/claims/user_management.html:79
msgid ""
"Ta bara bort konton du är säker på historik försvinner inte, men personen "
"tappar all åtkomst."
msgstr ""
#: claims/templates/claims/user_management.html:87
msgid "Befintliga användare"
msgstr ""
#: claims/templates/claims/user_management.html:88
msgid "Justera behörigheter"
msgstr ""
#: claims/templates/claims/user_management.html:99
msgid "Superuser"
msgstr ""
#: claims/templates/claims/user_management.html:103
msgid "Saknar namn"
msgstr ""
#: claims/templates/claims/user_management.html:103
msgid "Ingen e-post"
msgstr ""
#: claims/templates/claims/user_management.html:128
msgid "Spara behörigheter"
msgstr ""
#: claims/templates/claims/user_management.html:132
msgid "Ta bort konto"
msgstr ""
#: claims/templates/claims/user_management.html:134
msgid "Åtgärden går inte att ångra. Användaren förlorar omedelbart åtkomst."
msgstr ""
#: claims/templates/claims/user_management.html:135
#, python-format
msgid "Ta bort %(user.username)s?"
msgstr ""
#: claims/templates/claims/user_management.html:140
msgid "Ta bort användare"
msgstr ""
#: claims/templates/claims/user_management.html:144
msgid "Kan inte tas bort (antingen du själv eller superuser)."
msgstr ""
#: claims/templates/claims/user_management.html:152
msgid "Inga användare upplagda."
msgstr ""
#: claims/templates/claims/user_management.html:153
msgid "Skapa det första kontot via formuläret ovan."
msgstr ""
#: claims/validators.py:87
#, python-format
msgid "Kvitton får vara max %(size)s MB."
msgstr ""
#: claims/validators.py:96
#, python-format
msgid "Otillåtet filformat. Tillåtna format är %(formats)s."
msgstr ""
#: claims/validators.py:105
#, python-format
msgid "Otillåten MIME-typ: %(type)s."
msgstr ""
#: claims/validators.py:113
msgid "Filens innehåll matchar inte förväntat format."
msgstr ""
#: claims/views.py:127
#, python-brace-format
msgid "{} utlägg skickade in."
msgstr ""
#: claims/views.py:130
msgid "Inga utlägg kunde sparas. Fyll i minst en rad."
msgstr ""
#: claims/views.py:132
msgid "Kunde inte spara utläggen. Kontrollera formuläret."
msgstr ""
#: claims/views.py:186 claims/views.py:238 claims/views.py:262
msgid "Du har inte behörighet att uppdatera utlägg."
msgstr ""
#: claims/views.py:200
msgid "Utlägget är redan markerat som betalt och kan inte ändras."
msgstr ""
#: claims/views.py:207
#, python-format
msgid "%(claim)s markerades som godkänd."
msgstr ""
#: claims/views.py:211
#, python-format
msgid "%(claim)s markerades som nekad."
msgstr ""
#: claims/views.py:215
#, python-format
msgid "%(claim)s återställdes till väntande status."
msgstr ""
#: claims/views.py:235
msgid "Betalningshantering är inte aktiverad."
msgstr ""
#: claims/views.py:243
msgid "Endast godkända utlägg kan markeras som betalda."
msgstr ""
#: claims/views.py:246
msgid "Detta utlägg är redan markerat som betalt."
msgstr "Detta utlägg är redan markerat som betalt."
#: claims/views.py:257
#, python-format
msgid "%(claim)s markerades som betald."
msgstr "%(claim)s markerades som betald."
#: claims/views.py:266
msgid "Endast väntande utlägg kan redigeras via panelen."
msgstr "Endast väntande utlägg kan redigeras via panelen."
#: claims/views.py:295
#, python-format
msgid "Följande fält uppdaterades: %(fields)s"
msgstr "Följande fält uppdaterades: %(fields)s"
#: claims/views.py:301
msgid "Informationen uppdaterades."
msgstr "Informationen uppdaterades."
#: claims/views.py:303
msgid "Inga förändringar att spara."
msgstr "Inga förändringar att spara."
#: claims/views.py:369
msgid "Du saknar behörighet för åtgärden."
msgstr "Du saknar behörighet för åtgärden."
#: claims/views.py:416
#, python-format
msgid "Användaren %(user)s skapades."
msgstr ""
#: claims/views.py:427
msgid "Du kan inte ta bort din egen staff-status."
msgstr ""
#: claims/views.py:433
#, python-format
msgid "Behörigheter uppdaterades för %(user)s."
msgstr ""
#: claims/views.py:435
msgid "Kunde inte uppdatera behörigheter."
msgstr ""
#: claims/views.py:445
msgid "Du kan inte ta bort ditt eget konto."
msgstr ""
#: claims/views.py:447
msgid "Du kan inte ta bort en superuser via detta gränssnitt."
msgstr ""
#: claims/views.py:450
msgid "Användaren togs bort."
msgstr ""
#: claims/views.py:453
msgid "Okänd åtgärd."
msgstr ""
#: claims_system/settings.py:114
msgid "Swedish"
msgstr ""
#: claims_system/settings.py:115
msgid "English"
msgstr ""
#: templates/registration/logged_out.html:4
msgid "Utloggad"
msgstr ""
#: templates/registration/logged_out.html:9
msgid "Du är utloggad"
msgstr ""
#: templates/registration/logged_out.html:10
msgid "Vi ses snart igen"
msgstr ""
#: templates/registration/logged_out.html:12
msgid ""
"Din session är avslutad. Du kan när som helst logga in igen för att hantera "
"utlägg eller administrera systemet."
msgstr ""
#: templates/registration/logged_out.html:16
msgid "Till inloggningen"
msgstr ""
#: templates/registration/login.html:10
msgid "Välkommen tillbaka"
msgstr ""
#: templates/registration/login.html:12
msgid "Använd dina administratörsuppgifter för att hantera utlägg."
msgstr ""
#: templates/registration/login.html:46
msgid "Behöver du ett konto? Kontakta en superuser i organisationen."
msgstr ""