claims-system

Modern Django/Tailwind-baserad portal för att ta emot, granska och betala utlägg.


1. Kom igång

  1. uv sync
  2. uv run python manage.py migrate
  3. uv run python manage.py createsuperuser
  4. uv run python manage.py runserver

Nyckel-URLer (default):

  • Offentligt formulär GET /claims/new/
  • Bekräftelsesida GET /claims/submitted/
  • Adminlista GET /claims/admin/
  • Mina utlägg GET /claims/mine/
  • Användarhantering GET /claims/users/
  • Export-placeholder GET /claims/export/
  • Auth GET /accounts/login|logout/

2. Kärnfunktioner

  • Multi-rad formulär: Offentligt formulär stödjer upp till 5 rader. Lägg till ?forms=n eller använd +/-knapparna (lägger till rader utan reload).
  • Auto-prefill: Inloggade användare får namn, e-post och senaste kontonummer förifyllt.
  • Valuta & projekt: Varje rad har dold valutaväljare (SEK default) och projektreferens. Projekt listas från Django admin > Projekt.
  • Kvitton: Filuppladdningar sparas med slumpat UUID-baserat namn under receipts/ för säkerhet och unika namn.
  • Adminlista: Kortlayout med statuschippar, loggtimeline, kvittolänkar och inline-formulär för godkänn/avslag.
  • Betalspårning: När intern betalning är på får godkända claims en "Betala"-knapp. När ett claim markeras som betalt låses status/kommentar tills reset görs.
  • Mina utlägg: Inloggade ser sina egna claims i samma Tailwind-layout med kvitto-länk och logg.
  • Användarhantering: Tailwind-sida där personal kan skapa konton, tilldela claims.view_claim/claims.change_claim, markera staff och ta bort användare.

3. Språk & UI

  • Django i18n är aktiverat (LANGUAGES = [('sv','Swedish'), ('en','English')], LocaleMiddleware, språkväljare i navbaren).
  • Alla mallar/formulär använder {% trans %}/gettext. Engelska översättningar ligger i locale/en/LC_MESSAGES/django.po (kompileras till .mo).
  • Uppdatera översättningar:
    uv run django-admin makemessages -l en
    uv run django-admin compilemessages -l en
    
  • <html lang="{{ LANGUAGE_CODE }}"> sätts automatiskt, och språkväljaren lagrar valet i session/cookie.

4. Viktiga inställningar

Variabel Default Beskrivning
CLAIMS_ENABLE_INTERNAL_PAYMENTS true Styr “Betala”-flödet. Kan också togglas i Django admin > Systeminställningar.
CLAIMS_EMAIL_ENABLED false Slår på e-postaviseringar. Låt vara false i testläge.
CLAIMS_EMAIL_FROM no-reply@claims.local Avsändare för utskick.
CLAIMS_ADMIN_NOTIFICATION_EMAIL tom Om satt skickas notifiering vid nytt claim (när e-post är aktiverad).
EMAIL_BACKEND django.core.mail.backends.console.EmailBackend Byt till SMTP i prod (se nedan).
EMAIL_HOST, EMAIL_PORT, EMAIL_USE_TLS, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD tom Standard Django SMTP-inställningar.
LANGUAGE_CODE sv Standardspråk.
LOCALE_PATHS BASE_DIR/locale Katalog för .po/.mo.
LOGIN_REDIRECT_URL /claims/admin/ Efter inloggning.
LOGOUT_REDIRECT_URL /accounts/login/ Efter utloggning.

SMTP-exempel:

CLAIMS_EMAIL_ENABLED=true
CLAIMS_EMAIL_FROM=claims@example.com
CLAIMS_ADMIN_NOTIFICATION_EMAIL=finance@example.com
EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_USE_TLS=true
EMAIL_HOST_USER=apikey
EMAIL_HOST_PASSWORD=secret

5. Underhåll & verktyg

  • Reset claims: uv run python manage.py reset_claims (bekräfta med ja eller använd --noinput). Tar bort alla claims/loggar/kvitton men lämnar användarkonton.
  • Django admin: /admin/ används för projekt, grupper, superusers, SystemSetting mm. Staff-användare har automatiskt åtkomst.
  • Testa konfiguration: uv run python manage.py check.
  • Språkreset: Rensa cookies om språkväljaren inte byter språk (Django använder django_language cookien).

6. Länkar och roller

  • Offentligt formulär: alla (även utan konto).
  • Mina utlägg / Adminlista / Export / Betalningar: kräver claims.view_claim (och claims.change_claim för beslut).
  • Användarhantering: auth.view_user + respektive add/change/delete.
  • Språkväljare och logout finns i nav-menyn på varje sida.

Se även AGENTS.md för utvecklingsriktlinjer, betalflöden och e-postpolicy. EOF

Description
No description provided
Readme 340 KiB
Languages
HTML 55.1%
Python 44.9%