From 2de32b2083bf981201f6fce3e1f3124da3b76c5d Mon Sep 17 00:00:00 2001 From: Victor Andersson Date: Tue, 11 Nov 2025 20:27:41 +0100 Subject: [PATCH] feat: harden dashboard editing and translations --- claims/forms.py | 11 +- claims/templates/claims/base.html | 1 + claims/templates/claims/dashboard.html | 186 ++--- claims/tests.py | 41 +- claims/views.py | 56 +- locale/en/LC_MESSAGES/django.mo | Bin 15865 -> 15815 bytes locale/en/LC_MESSAGES/django.po | 220 +++--- locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 1245 bytes locale/sv/LC_MESSAGES/django.po | 984 +++++++++++++++++++++++++ 9 files changed, 1264 insertions(+), 235 deletions(-) create mode 100644 locale/sv/LC_MESSAGES/django.mo create mode 100644 locale/sv/LC_MESSAGES/django.po diff --git a/claims/forms.py b/claims/forms.py index 434a774..1d9cab2 100644 --- a/claims/forms.py +++ b/claims/forms.py @@ -58,30 +58,23 @@ class ClaimLineForm(forms.ModelForm): class ClaimDecisionForm(forms.Form): + ACTION_PENDING = "pending" ACTION_APPROVE = "approve" ACTION_REJECT = "reject" ACTION_CHOICES = ( (ACTION_APPROVE, _("Godkänn")), (ACTION_REJECT, _("Neka")), + (ACTION_PENDING, _("Pending")), ) claim_id = forms.IntegerField(widget=forms.HiddenInput) action = forms.ChoiceField(choices=ACTION_CHOICES) - project = forms.ModelChoiceField( - queryset=Project.objects.none(), - required=False, - label=_("Evenemang/Projekt"), - ) 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") diff --git a/claims/templates/claims/base.html b/claims/templates/claims/base.html index c5c3b50..0b39450 100644 --- a/claims/templates/claims/base.html +++ b/claims/templates/claims/base.html @@ -91,5 +91,6 @@ {% endif %} {% block content %}{% endblock %} + {% block modals %}{% endblock %} diff --git a/claims/templates/claims/dashboard.html b/claims/templates/claims/dashboard.html index 57a2ce6..f412496 100644 --- a/claims/templates/claims/dashboard.html +++ b/claims/templates/claims/dashboard.html @@ -85,82 +85,6 @@ {% endfor %} - {% if can_change %} - - {% endif %}
@@ -211,7 +135,7 @@ {% trans "Ej markerad som betald" %} {% endif %} {% endif %} - {% if can_change %} + {% if can_change and claim.status == 'pending' %} +
+
+ {% csrf_token %} + + +
+ + + + + + +
+
+ + +
+
+ + +
+
+ + + {% endif %} + {% endfor %} + {% endif %} +{% endblock %} diff --git a/claims/tests.py b/claims/tests.py index d79fa28..65fb65b 100644 --- a/claims/tests.py +++ b/claims/tests.py @@ -125,26 +125,26 @@ class DashboardViewTests(TestCase): response = self.client.get(reverse("claims:admin-list") + "?status=approved") self.assertFalse(response.context["has_filtered_claims"]) - def test_attester_can_update_project_when_deciding(self): - project_old = Project.objects.create(name="Original", is_active=True) - project_new = Project.objects.create(name="Corrected", is_active=True) - claim = self._create_claim(project=project_old) + 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_APPROVE, - "decision_note": "Updated project", - "project": project_new.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.project, project_new) - self.assertTrue(claim.logs.filter(action=ClaimLog.Action.PROJECT_CHANGED).exists()) + 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) @@ -174,3 +174,26 @@ class DashboardViewTests(TestCase): 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()) diff --git a/claims/views.py b/claims/views.py index e37f351..7871408 100644 --- a/claims/views.py +++ b/claims/views.py @@ -201,23 +201,26 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView): return redirect(request.get_full_path()) previous_status = claim.status claim.decision_note = decision_note - new_project = form.cleaned_data.get("project") - project_changed = False - if new_project is not None and new_project != claim.project: - claim.project = new_project - project_changed = True - if action == ClaimDecisionForm.ACTION_APPROVE: - claim.status = Claim.Status.APPROVED - messages.success(request, _("%(claim)s markerades som godkänd.") % {"claim": claim}) + target_status = Claim.Status.APPROVED + 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: - claim.status = Claim.Status.REJECTED - messages.warning(request, _("%(claim)s markerades som nekad.") % {"claim": claim}) + target_status = Claim.Status.PENDING + feedback = messages.info + feedback_msg = _("%(claim)s återställdes till väntande status.") - update_fields = ["status", "decision_note", "updated_at"] - if project_changed: - update_fields.append("project") + 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( action=ClaimLog.Action.STATUS_CHANGED, performed_by=request.user, @@ -225,12 +228,6 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView): to_status=claim.status, note=decision_note, ) - if project_changed: - claim.add_log( - action=ClaimLog.Action.PROJECT_CHANGED, - performed_by=request.user, - note=_("Project updated during decision."), - ) return redirect(request.get_full_path()) def _handle_payment(self, request): @@ -265,6 +262,12 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView): 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__", []): @@ -277,12 +280,19 @@ class ClaimDashboardView(LoginRequiredMixin, PermissionRequiredMixin, ListView): return redirect(request.get_full_path()) updated_claim = form.save() - changed_fields = [] + 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 - changed_fields.append(str(label)) - if changed_fields: - note = _("Fields updated: %(fields)s") % {"fields": ", ".join(changed_fields)} + 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, diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index eece1a878707ae33ca844078665234f47b3d8a5b..bfa05f5fdcefc9b319f2f6300f19b1fb72453ed8 100644 GIT binary patch delta 4689 zcmYk;32;>P0mt!wLK2E#Oae;6(L5pnLLdhqL=eJNK|l}+LO8q0E=kB{H|{P(E>|nc zp&acJxfL{vx@yd-3}YNzjd{2SbMbR5#w*w!yJi~G7EAFS9Expl zDyHCEyc4Ui93OLynnM)4T=*y6fsban4|=dG=Ry1tuEk`00ej&Vq_5^U-i@DNKRSK^ z@8UeGgE7M}57j{r>iLDpBW4-4HBn>M+Z)@kCpUJXUO0^op11e^iyBcHt!acA$ly&+ z?15#dj?TkASc3zx3B&jqrsHs4*5ppY$+T}~Q&0u3qk8@&j=;;P9{23%He7^UGG#ai zCt*L_kNxo?Y6d%G8^dIpT-5ue_+uJFmic@pk2a8Z^ zKM1uXGf^Xd997|JRD}moQ~NHep3hKw`ul|G)0}5fAwrE7qt1RQ5CGf zRNRD`svW2b_na|Sg7*Dx8|uwWW_J5x27-i%q*Mn)_SCBvmVvXTLsL&dUl!%8rd0C#ouBpyoQPI8ui_#^>%++hoMGT zhpBiB_1-CDUz*?A^Q)+Vv><&lH!%&n7rJ|c|yT z&#xgrX67bpN^^Kx*YC$MI2<*iRd^R}Mfz&?pz1q|TGBtGHg^kVV0x)rUoO&K)Ra@u z$j0EEI2F}!CF;c}>cx%r{%+J%$5B&#%3i;OT9T`%y>Jcn-1pWjrc3qpz;qmf?ezVR zqmadg=@`TXs0aRNuYZI6IlqaTp%PB0)0Cmk7odI@La6sv+v}TAn|P-^Z$@=&A8L=i ziL+?mT(vhQ3^0a&!p$_i59?7CzJi*e!}k0`Y{U5%s1ctB!b zT!P#(U!y+DE(4ieefPsCXe4t`75Pw8?nhO$+}>Y{YPbp2@Jpz*ZpKVJfF1A{YNTgS z^?;A>Qe{*774H|>7^?fJNiIM2ljoQQhyRn%8;5Y@mL)E@aOs-f$sirbdi&kWT- z9%=wZsQcxp4oyG}a2jf6XO}Vmda%ykSY~}1^%<=}jd%n0z^$lFcg$WthwVB43a8@@ zR0pQq?=~s)6@VBRGYL zsYd;qaRK?y{D(h7a3Fuwfe@;`=TOgY#(5Zh+1^N^)v;ViM~!$o>IDz#g#h-(M(l;V zP`~k?qMrK(^;3HtHNqCuRJZ0=sT$K!=ZkPSE=TH(nhz)>ap85MW0#BhDUK$aNj*{J zw~nn84v|Ur!cOY}tEeK++;*-(ujyd4$-mE zCGqzJe|M9~M6;Glw495Gjt|JaiIOot!Nf`n@0PI^#$`7(Jr4$*w~3LK~s0@ z$f3YwnO_heIZpKcgQS7netgWy%S4-Qi@i~acau88Pe9^`7Tdx+>u~ET)VCcXv+T9^ zQM-LA@smv?pKK>@l2oE&8JUwPx&K_hVava=E@FLcjDdulX;j6LGm2wLI#r= zWC&SHV!zAi6g!y4tDp1e}o1TU+f5dBV=3 zT94D<3HbcJK&&u35PKtgRla{gqUQOu7;zRhGyrB2Qr1*-$#+2eo0srFvKarTCuv10Ll|F|-MSR}G zkRmlccUZBO;#sj^Nib(BSLO%({$Qi3c1Phf`a-_gj_i){izRu<@rU|vZWT`+v@0cc bv~Twg4wImo1Hp(Yud49`s^dF{R3!foMOiV} delta 4794 zcmZ|Rd2p2F0mt!&upt}?gg_vN;42bHNC*(l$RSs-1fp_ZrMP4_$&zF@-Q93B!j>XX zxq?I#B(;Ljaw*7)7J|hJYDH^D%CwbQ$1>BFwswRWZ3`&$``djo!#}>mZ$Hm_J?Hzr z;oXKC4UtdNTssZhJLDcRy`3>BZH#$5Sx1dIo@$JPuV5d%i1*@G*bURW8q*2$um=vu zi8viQU?aM4H>Tk8_#hsQ8!?|#@Nl3Y&6tk(6zale?1hK1J^mUK@FUE{OGsbMH<*qt zdP7wv3yT;)0d`@3Nq1w$VF1Y%zG3xf=}#;tJt6YFHkr1q;?1MQ8!LU zjcgWb#EX&1Fk$S6>rov(iUoKQN8l9)*0gF%# zhfxhTAeWf+xEPzU2ydcha9~D!CPty|E5+V8166+=X5q6KQBO}$n2#;UpiTG8cn9)O z=ZjHmKM}PgUet)!p(=bDbzKXx8s_Pog^bHmah_s3p3Fy3R!_y1y${VqetpEvV~v;}|@KBk}WW=3i6V zm)7&K5Y_NP)D%C4dNx*|rg9zXY2Jhyaiet?&SZZtdhttCy$hKxjnsofa1CnhkE1$z zHbOx?yNK%PRa66CS#RP-_V1u>+{kokji13P+=~xjN9I{eRD$(RL6H zc?=zloTZ=(KeHEHMUCt>YK@be_>CE;sV+pFpNN{7X{gt3p4EqHpaFINW-P>J4C4E! z4vnLi{b}EnP~f>UwWx|Vpc>kR8u3w72V3m^IeY#hs)4_uD*UhYHtN1arbG30N1g9y z9cUef9rXT>rjW-4CCI%d5Iez#2-T52Sb@h-Yu4lb_y;Nv^^A-}Ju?rZ8k~)@u>v)) z7F>&$a2(F<8-Iv*Vi(#shbd?zr>*bX3qC=O{5tZ$nj2V#={fNwDMx)NSD{9@5gTzE zsw2Jo88Zh5qn2y~YRMW=59c0?Xl)KqD8Ng|^JLnvFdDgo2{;VZ&`3b;$W>Tm;Uga#W<;OofDX9H{sDX??`e=%=9lG=R+{R?)&o9M!J1LLn%C)5ZFFbl_{?puT%a4BkuY9bWW&>Cd+%~njp zSCM5jXK*lH!TH#Y^-9JX>nbc|e*+fbN2rI?HHam^o~W6bgKBsY>bw`{Vq_%+25Wwc z9q|^b1MO&4J?@Nr%uG7+NiapI5zVycYw;oW!>AFR!7lhAs=iNAOZyMhr~3}3V)r4j z`XVNWf*LGAjjRk)a3QMUD%6eZQ8zwk&mTce@hMb?eq)bcMJ>gDP-}k+b)Adpkr}A^ z3b3=@{|OY-@S~W9i!p$8*cm^w$G^ZS>?aI0hJR)%KkE2uqz$v)?!S)uE}TW(|9gA< zuc(Ll-**2xw%7ZAgMuEigkh`?jz#r+H}WUl?8D)B8dc#nREO`_{bWvRZL?7$&p|ES z09=JbP)l+I^{}>J4Ze#J>M+Ab#NSUJ>iyr08rfk~MJG^Ge+pI61$6K->bhH~4z%Un zR0mQ}YoCT)u@`p7L8yUEM%`C7lKIz2=5RngTZ(DuxBF|62ik1K1$YK^V-G$OdOLcf z8kmfFX6B+A@}TNnh3eP_RQ=mg18KJBUmC^yt4F6fppl+KP4NYL;m7v)KdskMuhaif z72n2w*uFUa5Dr2eFU4*+8|PsassnGL>i+;U@J|s68qt@i5qymkup=(w4v2J%o149D11V>bI`$SuZ)YIr}Yp2!;%bm0YDg1@sThSJ)1*dLD? z(UYhfno!rjfCKOl=HeyPxBeT{b=iD<^vTUd4J;ou!^K#Myd{+yg9$H*o!n7mBxAC8uSdx=GM`kCCQ?o|lZT1^L-7j|B1?$2=i|ga*Ln>-WTHKG7r6NhxuYc(?h_DdiHPZ5`1&ze_uIYqmbodce92f2Fc28b}@@Z;>Am zebHVabIC8sBjg=2oJ=Mg$r_?9f%GO}QcWh19HQ;JabmwI{OWu0eKM9TCoLp4kUkWK z5N-3w`dBIcDXpPA((X^SK85LIsNEOYWIU-QyUBSHAdMu8^dx7=FrsZWX%~O#V*92p zPV9F(zp3Q0*k1f+^j+ml%88^C=|EhM z4hI~@8Fs=|URtXN1Z&-4>WB@sJY2KNsqzNBh0%ZIJ<=w5n%7(Bl-CD?UVk`RoWIi5 zbY;+jZy)Ta!NKSs2lq{wGQqQq;l`SXjhC+bDq_2#`lYqLkUH(GaEF`_6+7-qx6f}c gUl9y2FbzFi7`;`ryKUyT4|>ap!>(v>^qhqM1K1ElbpQYW diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 8590cfe..9de2566 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: claims-system 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-09 21:45+0100\n" +"POT-Creation-Date: 2025-11-11 19:06+0000\n" "PO-Revision-Date: 2025-11-08 23:40+0100\n" "Last-Translator: ChatGPT \n" "Language-Team: English\n" @@ -12,43 +12,43 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: claims/forms.py:19 claims/forms.py:107 +#: claims/forms.py:19 claims/forms.py:100 +#: claims/templates/claims/dashboard.html:516 msgid "Namn" msgstr "Name" -#: claims/forms.py:23 claims/forms.py:108 claims/forms.py:119 +#: claims/forms.py:23 claims/forms.py:101 claims/forms.py:112 #: claims/templates/claims/dashboard.html:176 -#: claims/templates/claims/dashboard.html:326 +#: claims/templates/claims/dashboard.html:520 msgid "E-post" msgstr "Email" -#: claims/forms.py:28 claims/forms.py:109 +#: claims/forms.py:28 claims/forms.py:102 #: claims/templates/claims/dashboard.html:164 -#: claims/templates/claims/dashboard.html:330 +#: claims/templates/claims/dashboard.html:524 msgid "Kontonummer" msgstr "Account number" -#: claims/forms.py:49 claims/forms.py:113 +#: claims/forms.py:49 claims/forms.py:106 #: claims/templates/claims/dashboard.html:211 -#: claims/templates/claims/dashboard.html:356 +#: claims/templates/claims/dashboard.html:550 msgid "Beskrivning" msgstr "Description" -#: claims/forms.py:50 claims/forms.py:110 +#: claims/forms.py:50 claims/forms.py:103 #: claims/templates/claims/dashboard.html:160 -#: claims/templates/claims/dashboard.html:334 +#: claims/templates/claims/dashboard.html:528 #: claims/templates/claims/my_claims.html:23 msgid "Belopp" msgstr "Amount" -#: claims/forms.py:51 claims/forms.py:111 -#: claims/templates/claims/dashboard.html:338 +#: claims/forms.py:51 claims/forms.py:104 +#: claims/templates/claims/dashboard.html:532 msgid "Valuta" msgstr "Currency" -#: claims/forms.py:52 claims/forms.py:73 claims/forms.py:112 -#: claims/templates/claims/dashboard.html:271 -#: claims/templates/claims/dashboard.html:346 +#: claims/forms.py:52 claims/forms.py:105 +#: claims/templates/claims/dashboard.html:540 msgid "Evenemang/Projekt" msgstr "Project" @@ -56,84 +56,85 @@ msgstr "Project" msgid "Kvitto" msgstr "Receipt" -#: claims/forms.py:64 +#: claims/forms.py:65 msgid "Godkänn" msgstr "Approve" -#: claims/forms.py:65 +#: claims/forms.py:66 msgid "Neka" msgstr "Reject" -#: claims/forms.py:78 claims/templates/claims/dashboard.html:126 +#: claims/forms.py:67 claims/models.py:29 +#: claims/templates/claims/dashboard.html:332 +msgid "Pending" +msgstr "Pending" + +#: claims/forms.py:75 claims/templates/claims/dashboard.html:126 #: claims/templates/claims/dashboard.html:268 msgid "Kommentar" msgstr "Comment" -#: claims/forms.py:90 +#: 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:118 +#: claims/forms.py:111 msgid "Användarnamn" msgstr "Username" -#: claims/forms.py:120 +#: claims/forms.py:113 msgid "Förnamn" msgstr "First name" -#: claims/forms.py:121 +#: claims/forms.py:114 msgid "Efternamn" msgstr "Last name" -#: claims/forms.py:122 +#: claims/forms.py:115 msgid "Lösenord" msgstr "Password" -#: claims/forms.py:123 +#: claims/forms.py:116 msgid "Bekräfta lösenord" msgstr "Confirm password" -#: claims/forms.py:124 +#: claims/forms.py:117 msgid "Administratör (staff)" msgstr "Administrator (staff)" -#: claims/forms.py:125 +#: claims/forms.py:118 msgid "Ge behörighet att se utlägg" msgstr "Allow viewing claims" -#: claims/forms.py:126 +#: claims/forms.py:119 msgid "Ge behörighet att besluta utlägg" msgstr "Allow deciding claims" -#: claims/forms.py:131 +#: claims/forms.py:124 msgid "Användarnamnet är upptaget." msgstr "That username is already taken." -#: claims/forms.py:137 +#: claims/forms.py:130 msgid "Lösenorden matchar inte." msgstr "Passwords do not match." -#: claims/forms.py:155 claims/templates/claims/user_management.html:116 +#: claims/forms.py:148 claims/templates/claims/user_management.html:116 msgid "Admin/staff" msgstr "Admin/staff" -#: claims/forms.py:156 claims/templates/claims/user_management.html:120 +#: claims/forms.py:149 claims/templates/claims/user_management.html:120 msgid "Får se utlägg" msgstr "May view claims" -#: claims/forms.py:157 claims/templates/claims/user_management.html:124 +#: claims/forms.py:150 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:413 -msgid "Pending" -msgstr "Pending" - -#: claims/models.py:30 claims/templates/claims/dashboard.html:417 +#: claims/models.py:30 claims/templates/claims/dashboard.html:336 msgid "Approved" msgstr "Approved" -#: claims/models.py:31 claims/templates/claims/dashboard.html:421 +#: claims/models.py:31 claims/templates/claims/dashboard.html:340 msgid "Rejected" msgstr "Rejected" @@ -458,78 +459,66 @@ msgid "Åtgärd" msgstr "Action" #: claims/templates/claims/dashboard.html:273 -msgid "Behåll nuvarande" -msgstr "Keep current" - -#: claims/templates/claims/dashboard.html:278 -msgid "Justera projekt om underlaget skickats in mot fel evenemang." -msgstr "Adjust the project if the submission was sent against the wrong event." - -#: claims/templates/claims/dashboard.html:282 msgid "Uppdatera beslut" msgstr "Update decision" -#: claims/templates/claims/dashboard.html:293 +#: claims/templates/claims/dashboard.html:284 #: claims/templates/claims/my_claims.html:78 msgid "Inga utlägg ännu" msgstr "No claims yet" -#: claims/templates/claims/dashboard.html:294 +#: claims/templates/claims/dashboard.html:285 msgid "När formuläret tas emot visas posterna automatiskt här." msgstr "As soon as submissions arrive they will appear here." -#: claims/templates/claims/dashboard.html:300 +#: claims/templates/claims/dashboard.html:291 msgid "Inga utlägg matchar filtret" msgstr "No claims match the filter" -#: claims/templates/claims/dashboard.html:301 +#: claims/templates/claims/dashboard.html:292 msgid "Välj en annan status för att se fler poster." msgstr "Choose another status to see more entries." -#: claims/templates/claims/dashboard.html:309 -msgid "Redigera utlägg" -msgstr "Edit claim" - -#: claims/templates/claims/dashboard.html:313 -msgid "Stäng" -msgstr "Close" - -#: claims/templates/claims/dashboard.html:348 -msgid "Ingen" -msgstr "None" - -#: claims/templates/claims/dashboard.html:361 -msgid "Avbryt" -msgstr "Cancel" - -#: claims/templates/claims/dashboard.html:364 -msgid "Spara ändringar" -msgstr "Save changes" - -#: claims/templates/claims/dashboard.html:370 -msgid "Aktivera JavaScript för att kunna redigera uppgifter direkt här." -msgstr "Enable JavaScript to edit the information directly here." - -#: claims/templates/claims/dashboard.html:381 +#: claims/templates/claims/dashboard.html:300 msgid "Senaste inskick" msgstr "Latest submissions" -#: claims/templates/claims/dashboard.html:382 +#: claims/templates/claims/dashboard.html:301 msgid "Aktivitet" msgstr "Activity" -#: claims/templates/claims/dashboard.html:400 +#: claims/templates/claims/dashboard.html:319 msgid "Inga aktiviteter än." msgstr "No activity yet." -#: claims/templates/claims/dashboard.html:408 +#: claims/templates/claims/dashboard.html:327 msgid "Statusfördelning" msgstr "Status breakdown" -#: claims/templates/claims/dashboard.html:409 +#: claims/templates/claims/dashboard.html:328 msgid "Snabbstatistik" 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 msgid "Export till redovisningssystem" msgstr "Export to bookkeeping system" @@ -883,102 +872,104 @@ msgstr "" msgid "Kunde inte spara utläggen. Kontrollera formuläret." msgstr "" -#: claims/views.py:186 claims/views.py:241 claims/views.py:265 +#: claims/views.py:186 claims/views.py:238 claims/views.py:262 #, fuzzy #| msgid "Ge behörighet att besluta utlägg" msgid "Du har inte behörighet att uppdatera utlägg." msgstr "Allow deciding claims" #: 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." -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:212 +#: claims/views.py:207 #, python-format msgid "%(claim)s markerades som godkänd." msgstr "%(claim)s was marked as approved." -#: claims/views.py:215 +#: claims/views.py:211 #, python-format msgid "%(claim)s markerades som nekad." msgstr "%(claim)s was marked as rejected." -#: claims/views.py:232 -msgid "Project updated during decision." -msgstr "Project updated during decision." +#: 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:238 +#: claims/views.py:235 msgid "Betalningshantering är inte aktiverad." msgstr "Payment handling is not enabled." -#: claims/views.py:246 +#: claims/views.py:243 msgid "Endast godkända utlägg kan markeras som betalda." msgstr "Only approved claims can be marked as paid." -#: claims/views.py:249 +#: claims/views.py:246 msgid "Detta utlägg är redan markerat som betalt." msgstr "This claim is already marked as paid." -#: claims/views.py:260 +#: claims/views.py:257 #, python-format msgid "%(claim)s markerades som betald." msgstr "%(claim)s was marked as paid." -#: claims/views.py:287 -#, python-format -msgid "Fields updated: %(fields)s" -msgstr "Fields updated: %(fields)s" +#: 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:293 +#: 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:295 +#: claims/views.py:303 msgid "Inga förändringar att spara." msgstr "No changes to save." -#: claims/views.py:361 +#: claims/views.py:369 msgid "Du saknar behörighet för åtgärden." msgstr "You do not have permission to perform this action." -#: claims/views.py:408 +#: claims/views.py:416 #, python-format msgid "Användaren %(user)s skapades." msgstr "" -#: claims/views.py:419 +#: claims/views.py:427 msgid "Du kan inte ta bort din egen staff-status." msgstr "" -#: claims/views.py:425 +#: claims/views.py:433 #, python-format msgid "Behörigheter uppdaterades för %(user)s." msgstr "" -#: claims/views.py:427 +#: claims/views.py:435 #, fuzzy #| msgid "Justera behörigheter" msgid "Kunde inte uppdatera behörigheter." msgstr "Adjust permissions" -#: claims/views.py:437 +#: claims/views.py:445 msgid "Du kan inte ta bort ditt eget konto." msgstr "" -#: claims/views.py:439 +#: claims/views.py:447 msgid "Du kan inte ta bort en superuser via detta gränssnitt." msgstr "" -#: claims/views.py:442 +#: claims/views.py:450 #, fuzzy #| msgid "Användare" msgid "Användaren togs bort." msgstr "Users" -#: claims/views.py:445 +#: claims/views.py:453 msgid "Okänd åtgärd." msgstr "" @@ -1028,6 +1019,19 @@ msgstr "Use your admin credentials to manage claims." msgid "Behöver du ett konto? Kontakta en superuser i organisationen." 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" #~ msgstr "Admin – Claims" diff --git a/locale/sv/LC_MESSAGES/django.mo b/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2889d1688239060b13a77b02edf433839400960c GIT binary patch literal 1245 zcmd^;yKWOf6ov-~Hv z&`|OQrbtDX7jT1+s3_=YXn6?!aR?R_55SSnelxr0^84)U_ZtiE8SEPTHvABN9sU#U zZ21gh1Qx+dU>kf0?t=Hgx8M`-BbWz&fG+OpS;lUGH^Dn#5nKRU;6<SMWavA&ro(I2yXfv~`xVji; z7vMR#)8y(w#w^dx1FhK=_^G)%Y%$+UcsyJ(G~{|9H5by5Nr$v2El)&&1zD!ku@tN< zt>rYb$#fD$G@WSDQgC&eXXjbAz{(>se4w~So&D*tj-!2PsgD&+KiCM_LaG7_mEgwG zcsfy*D4k;P7+I_EEC+GDEDbG-;ZS?%#vYS zsTiQJVpY{o^^n^*RZ{&GU%<17&vYSD=omXq+~UtQ-J=cso)X)b*(qY(5XRLfQ%2+tp?x*OpnTtyecuEWC|TWV}x5Q?AwY+HxGb9Ip)7 zKD`KowpVX@<$#_w{d)Dm%Vs0Y)i4*Yqq#B(x2g82(yi5~5!6Fk3+q9(wjPwr?Qnbh zDMD2=;*s<^k`H~V1&yt)Q?gd8ttW9I)zLf#3hLE*IG0^4Eax^;Wu-#9HyQL;`Px3p za46I&_4c_o(w4fNinlV4bF%tUd!g#3ZZbZt?8P?MN=BL|UIoK8KB;WBHKoU^bh0ev d72PdSacMR8?{oM2?fuW^Zs+u~m>omGegRucXifkC literal 0 HcmV?d00001 diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po new file mode 100644 index 0000000..e13f1a2 --- /dev/null +++ b/locale/sv/LC_MESSAGES/django.po @@ -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 , 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 \n" +"Language-Team: LANGUAGE \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 %(current_forms)s 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 claims.view_claim\n" +" och claims.change_claim\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 ""