Adminpanel v4.131

Lägg till förening
Organisationsnummer Namn Föreningsansvariga Lag Landningssida Åtgärder
Laddar...
Lag-ID Lagnamn Förening Medlemmar Lagansvariga Åtgärder
Klicka på fliken för att ladda lag.
Namn E-post Telefon Roller (klicka för att hantera) Åtgärder
Klicka på fliken för att ladda användare.
Lägg till roll
Roll-ID Rollnamn Förhandsvisning Kräver lag Kräver förening Används av Åtgärder
Klicka på fliken för att ladda roller.
Beviljanderätt — vem kan ge ut vilka roller?

Admin Rbe har alltid fullständig behörighet. Klicka i matrisen för att lägga till eller ta bort en behörighet.

Laddar matris...

Lägg till produkt
Namn Beskrivning Pris Enhet Moms Aktiv Lagersaldo Åtgärder
Klicka på fliken för att ladda produkter.

Intern marginal (säljpris minus fruset FIFO-inköpspris). Täckningsbidraget innehåller fortfarande andelen till spelare/lag/förening — Bruttomarginalen är FöreningsSäljs verkliga vinst efter att den andelen dragits av, och nettomarginalen är den efter bolagsskatt. Påverkar inte avräkningen till föreningen.

Totalt för FöreningsSälj
Antal sålda Intäkt Kostnad Täckningsbidrag (exkl. moms) Andel spelare/lag/förening Bruttomarginal Nettomarginal Nettomarginal %
– – – – – – – –
Per produkt
Produkt Antal sålda Intäkt Kostnad Täckningsbidrag (exkl. moms) Andel spelare/lag/förening Bruttomarginal Nettomarginal Nettomarginal %
Klicka på fliken för att ladda lönsamhetsdata.
Per order
Ordernr Datum Köpare Intäkt Kostnad Täckningsbidrag (exkl. moms) Andel spelare/lag/förening Bruttomarginal Nettomarginal
Klicka på fliken för att ladda lönsamhetsdata.

Kumulativt hur mycket förening, lag och spelare ska få — inte vad kunden betalade. Bygger på levererade ordrar (Levererad/Utbetald) och perioden går på leveransdatum. Bekräftade ordrar räknas först när de markerats som levererade; Avbruten/Återbetald ger ingen avräkning. Utbetalt/Kvar att betala nettas mot registrerade utbetalningar för vald period.

Totalt för FöreningsSälj
Omsättning Föreningens andel Lagets andel Spelarens andel FöreningsSäljs andel Brutto marginal (exkl. moms) Brutto marginal % Nettomarginal Nettomarginal % Utbetalt Kvar att betala Väntar bekräftelse Väntar leverans
– – – – – – – – – – – – –
Per förening (klicka på en rad för att se dess ordrar)
Förening Omsättning Föreningens andel Lagets andel Spelarens andel FöreningsSäljs andel Brutto marginal (exkl. moms) Brutto marginal % Nettomarginal Nettomarginal % Utbetalt Kvar att betala Väntar bekräftelse Väntar leverans
Klicka på fliken för att ladda avräkningsdata.
Per order
Ordernr Datum Förening Köpare Omsättning Föreningens andel Lagets andel Spelarens andel FöreningsSäljs andel Brutto marginal (exkl. moms) Brutto marginal % Nettomarginal Nettomarginal %
Klicka på fliken för att ladda avräkningsdata.
Fakturastatus per förening/period

Oberoende av om utbetalning skett — en utbetalning kan ske före eller efter fakturan.

Förening Period Status Fakturanr Kommentar Kopplad utbetalning Uppdaterad
Klicka på fliken för att ladda fakturastatus.

Alla beställningar i systemet, oavsett förening. Filtrera på förening, orderdatum, köpare och status. Kontrollera inkommande betalningar i Swish och klicka Bekräfta för att registrera betalningen.

Order datum OrderNr/KvittoNr Köpare Förening Lag Förmånstagare Belopp Status Betalning Betalningsdatum Leveransdatum Åtgärd
Klicka på fliken för att ladda ordrar.

Kundprenumerationer med köpare, förening/lag, frekvens, nästa beställningsdatum och status. Klicka Avsluta för att avsluta en kunds prenumeration (support) — kunden får ett bekräftelsemejl.

Köpare Förening / lag Frekvens Nästa beställning Status Åtgärd
Klicka på fliken för att ladda prenumerationer.

Nya användare som ansökt om en roll visas här. Godkänn eller avvisa ansökan.

Klicka på fliken för att ladda ansökningar.

Barn som anmälts av en vårdnadshavare vid registrering visas här. Bekräfta för att skapa barnet som lagmedlem, eller avvisa anmälan.

Klicka på fliken för att ladda anmälningar.

Kunder som vill koppla sitt köp till ett barn i laget visas här. Skicka vidare till rätt lagmedlem (väntar sedan på barnets vårdnadshavare) eller avvisa förfrågan.

Klicka på fliken för att ladda förfrågningar.

Aktivera eller inaktivera inloggningsalternativ för användare.

Klicka på fliken för att ladda inställningar.

Hjälpcenter

Hitta snabbt vad du behöver — välj din roll nedan eller bläddra bland guiderna.

Det finns tre sätt att logga in beroende på vad din förening har aktiverat.

MS
Microsoft-konto

För konton inom Relations by Elveberg-organisationen. Klicka på den mörka knappen och logga in med ditt organisationskonto.

@
E-postlänk

Ange din e-post — du får en engångslänk per mail. Klicka på länken för att logga in.

🔑
Inloggningskod (barn)

Ange det användarnamn och den kod du fått på ett papper av din lagansvarig.

Första gången du loggar in? Du skickas direkt till ett registreringsformulär där du fyller i dina uppgifter och väljer din roll.

Barn loggar in med ett användarnamn och en kod du delar ut på papper — inget e-postkonto behövs.

Förutsättning: Administratören måste ha aktiverat Inloggning med kod (barn) under Admin → Inställningar.
  1. 1
    Gå till Lagets försäljning
    Klicka på Lagets försäljning i navigeringen. Om du inte ser länken — kontrollera att du har rollen Lagansvarig aktiverad under Min information.
  2. 2
    Öppna fliken Barnkonton
    Klicka på fliken Barnkonton längst till höger bland flikarna i Lagets försäljning.
  3. 3
    Klicka på "Skapa barnkonto"
    Knappen finns uppe till höger på fliken. Ett formulär öppnas.
  4. 4
    Fyll i barnets uppgifter
    Ange förnamn, efternamn och ett användarnamn. Användarnamnet är vad barnet skriver när det loggar in — välj något enkelt som barnet kan komma ihåg, till exempel emma_rod eller erik23. Välj sedan rätt lag.
  5. 5
    Spara eller skriv ut inloggningskoden
    När du klickar Skapa konto visas användarnamnet och en 6-teckens kod. Koden visas bara en gång. Skriv ut dialogen eller anteckna uppgifterna och ge papperet till barnet.
  6. 6
    Barnet loggar in
    Barnet öppnar appen, klickar Logga in med lösenord, skriver in sitt användarnamn och koden från papperet.
Giltighetstid: Kontot är aktivt i 90 dagar som standard. Se nedan hur du förlänger giltighetstiden.

I fliken Barnkonton ser du alla barn i dina lag med deras status. Här är vad du kan göra med varje konto.

Förläng
Giltighetstiden har gått ut — kontot visas med röd status Utgången. Klicka Förläng, välj antal dagar (30 / 60 / 90 / 180 / 365) och bekräfta. Den nya giltighetstiden räknas från idag oavsett när det gick ut.
Ny kod
Barnet har tappat sin kod — klicka Ny kod. Den gamla koden slutar fungera omedelbart. Ny kod visas en gång — skriv ut och ge barnet.
Spärra
Barnet ska tillfälligt inte ha tillgång — klicka Spärra. Barnet kan inte logga in. Klicka Aktivera för att ge åtkomst igen.
Statusfärger: Aktiv = kan logga in   Utgången = behöver förlängas   Spärrad = manuellt spärrad

Du har fått ett papper med ett användarnamn och en kod. Så här loggar du in.

  1. 1
    Klicka på "Logga in med lösenord"
    Knappen med nyckelikon finns på inloggningssidan. Syns den inte — fråga din lagansvarig.
  2. 2
    Skriv in ditt användarnamn
    Användarnamnet står på papperet du fick. Det är t.ex. emma_rod.
  3. 3
    Skriv in koden
    Koden är 6 stora bokstäver/siffror, t.ex. HJKM47. Stora och små bokstäver spelar ingen roll.
  4. 4
    Klicka Logga in
    Du är nu inloggad och kan registrera försäljning under Min försäljning.
Felmeddelande "Inloggningstiden har gått ut"? Koden fungerar fortfarande — men ditt konto behöver förnyas. Be din lagansvarig förlänga det.

  1. 1
    Gå till Min försäljning
    Klicka på Min försäljning i navigeringen efter att du loggat in.
  2. 2
    Välj produkter och ange antal
    Varje produkt visas med pris. Fyll i antal sålda för varje vara.
  3. 3
    Ange kundens namn
    Sök upp kundens i listan eller välj Okänd kund.
  4. 4
    Spara ordern
    Klicka Lägg order. Ordern sparas och syns i din orderhistorik.

Under Lagets försäljning finns fyra flikar:

Alla orders Fullständig lista över alla ordrar i laget med datum, säljare, kund och belopp.
Säljare Summering per säljare — se vem som sålt mest och totalsumma per person.
Tilldelningar Lägg till eller ta bort vilka i laget som har säljrollen aktiverad.
Barnkopplingar Kunder som angett ett barn vid köp — granska och länka till rätt lagmedlem.

Admin Systemadministratör — hanterar föreningar, lag, användare och inställningar.
Föreningsansvarig Kan se föreningens totala försäljning och hantera lagansvariga.
Lagansvarig Kan se lagets försäljning, skapa barnkonton, hantera säljare och tilldelningar.
Säljare Kan registrera egna försäljningar. Barnkonton loggar in med kod och har denna roll.
Kund Kan se produkter och stödja lagets försäljning som kund.
Byta aktiv roll? Gå till Min information och klicka på den roll du vill aktivera. Har du flera roller kan du växla fritt.
Versionshistorik
VersionBeskrivning
v4.131US #311: tydligare barnfrågor vid registreringen och profilbekräftelsen. Barnanmälan frågar nu "Har du barn som är med i något av föreningens lag?", med hjälptexten "Anmäl dem, så kan släkt och vänner handla för just ditt barn.". Köpkopplingen frågar "Vem vill du stötta med dina köp?", med knapparna Hela laget / Ett barn i laget. Bara texterna ändrades, inte funktionen.
v4.130US #291: under 1200 px ligger sidans sektioner (Handla, Om oss, Min information, försäljningsvyerna, Admin) bakom en menyknapp i sidhuvudet. Tidigare blev nav-raden på mobil bara några pixlar bred och de flesta länkarna gick inte att nå. Aktiv sektion är markerad i menyn, och en gul prick på menyknappen visar när det finns förfrågningar att besvara under Min information. Utloggad visas inloggningsknapparna i menyn i stället för i sidhuvudet, där de gav sidledsscroll. Desktop är oförändrat.
v4.129US #310: en order som bekräftas när lagret inte räcker sparas som förut, men admin får nu en varning med produkt och antal som saknas. Avräkning-fliken listar alltid bekräftade, levererade och utbetalda ordrar som saknar lagerförbrukning, så att de inte längre försvinner tyst ur avräkningen. Med knappen "Komplettera förbrukning" förbrukas det som saknas (FIFO) när en lagerbatch finns. Ordrar som redan ingår i en utbetalning eller ett underlag kan inte kompletteras.
v4.128US #309: under Föreningar kan admin markera en förening som standardförening vid registrering ("Sätt som standard" / "Ta bort standard"). Den är förvald, med lagen laddade, när en ny användare registrerar sig utan föreningslänk. En föreningslänk går alltid före, och användaren kan byta förening. Högst en förening kan vara standard.
v4.127US #308: en inläst varukorg efter inloggning såg ut som en lagd beställning — "I varukorgen" på produktkortet och knappen "Till kassan" är nu blå i stället för gröna, och varukorgsraden har etiketten "Din varukorg" ovanför antal och summa. Grönt används bara för Slutför beställning och bekräftelsen.
v4.126US #308: Handla på mobil — en fast varukorgsrad längst ner visar antal varor och summa med knappen "Till kassan", produktkortet visar "I varukorgen" med antalsväljare (− / +) när produkten är tillagd, och efter "Slutför beställning" scrollas bekräftelsen med Swish-betalningen fram. Sidfoten ligger sist på sidan i stället för fast längst ner på skärmar under 800 px.
v4.125US #306: Betalningar-fliken har en ny kolumn Förmånstagare och sökfältet matchar även förmånstagarens namn. Visa på en betald order visar förmånstagaren ovanför kvittot (syns inte i utskriften).
v4.124US #305: namnfältet vid barnanmälan (registreringen, profilbekräftelsen och Min information → Anmäl barn) ber nu om "Barnets för- och efternamn" i stället för "Barnets namn", så att lagansvarig får hela namnet.
v4.123US #298: rutan "Så fungerar det" vid registreringen förklarar nu vad som händer vid utebliven betalning — prenumerationen pausas och inga nya ordrar skapas förrän kunden handlar igen eller återupptar den.
v4.122US #295: hela barnresan testas nu automatiskt efter varje deploy till testmiljön – barnanmälan vid registrering och i efterhand, återkallelse, granskning, köpkoppling till barn samt vårdnadshavarens godkännande och avslag. Buggfixar som testet hittade: på smala mobilskärmar gjorde rolletiketten i sidhuvudet ("Kund — P14 Blå") och långa e-postadresser under Min information sidan bredare än skärmen, så att den zoomades ut. Etiketten kortas nu med "…" och e-postadressen radbryts.
v4.121US #290: ny kund kan redan vid registreringen välja att köpen ska gå till ett visst barn i laget (frågan "Vem ska dina köp gå till?"). Valet skapar samma kopplingsförfrågan som "Koppla köp till barn" i Min information och granskas av föreningen och godkänns av barnets vårdnadshavare. Tydligare text om att anmäla egna barn inte styr vem köpen går till.
v4.120US #289: kundens köpresa testas nu automatiskt (Playwright) efter varje deploy till testmiljön, på desktop och mobil. Buggfix som testet hittade: på smala mobilskärmar (≤ 540 px) stack inloggningsmenyn i sidhuvudet ut utanför skärmen, så att sidan gick att scrolla i sidled och zoomades ut. Sidhuvudet har nu mindre marginaler och en mindre logga på mobil.
v4.119Buggfix: fliken Användare (och lagets/föreningens medlemslistor) kunde inte laddas om en användare saknade efternamn — t.ex. ett barn som anmälts med bara förnamn. Sådana barn sparas nu med tomt efternamn i stället för inget alls.
v4.118US #285: ny knapp Rensa användare (behåll admin) i Testdata-kortet under Inställningar (bara testmiljön). Tar bort alla användare utom kajsa@elveberg.se och rolf@elveberg.se, med deras roller och lag-/föreningskopplingar kvar. Bekräftelsedialogen visar vilka konton som behålls och antal rader per tabell. Kräver att ekonomi-/transaktionsdata rensats först.
v4.117US #90: fliken Föreningar visar varje förenings landningssida (länken som föreningen delar med sina köpare) med en knapp Kopiera länk. En förening som har lag, ordrar eller andra kopplade uppgifter kan inte tas bort — ett tydligt felmeddelande visas och föreningsansvariga behålls (tidigare försvann kopplingarna trots att borttagningen misslyckades).
v4.116US #92: alla beställningar och köpare i fliken Betalningar. Nya filter för förening, orderdatum (från/till) och sök på köparens namn eller e-post, en ny statusknapp Alla, kolumnen Förening, köparens e-post/telefon under namnet samt en summarad med antal ordrar och totalbelopp för det filtrerade urvalet.
v4.115US #280 (Feature #276, 4 av 4): statusvy för kopplingsförfrågningar. Köparen ser sina egna förfrågningar under ny sektion Mina kopplingsförfrågningar i Min information, med statusarna Väntar på granskning / Väntar på vårdnadshavare / Godkänd / Avvisad (aldrig vem som avvisade; granskarens ev. motivering visas). Fliken Kopplingsförfrågningar (Lagets försäljning, Föreningens försäljning, adminpanelen) har fått filterknapparna Väntande / Hos vårdnadshavare / Godkända / Avvisade med historik: matchat barn, vem som skickade vidare/avvisade och om vårdnadshavaren godkänt eller avvisat. Avvisningsprompten anger nu att motiveringen visas för köparen.
v4.114US #279 (Feature #276, 3 av 4): vårdnadshavarens godkännande av kopplingsförfrågningar. När en granskare skickar vidare en förfrågan mejlas barnets bekräftade vårdnadshavare (1–2 st) och förfrågan visas under ny sektion Förfrågningar om ditt barn i Min information, med en räknarbadge på menylänken. En vårdnadshavares Godkänn aktiverar kopplingen direkt (status linked); Avvisa avslutar den. Köparen får ett mejl med beskedet — utan uppgift om vem som avvisade. Är köparen själv barnets vårdnadshavare aktiveras kopplingen direkt vid granskningen. Matchade förfrågningar räknas nu som "Väntar på koppling" i försäljningsstatistiken. Flyway V79 (guardianDecidedByGuid/guardianDecidedAt).
v4.113US #282 (buggfix, Feature #269): bekräftelse av barnanmälan gav "Något gick fel." så fort ett barn utan e-post redan fanns i systemet. Orsaken var att databasen bara tillät en person utan e-post (UQ_rbeIdentification_email, V44) — ersatt med ett filtrerat unikt index (Flyway V78). Rättar samtidigt samma fel för nya lagmedlemmar, barnmarkerade användare i Användare-fliken och säljarregistrerade ordrar med ny kund utan e-post. E-postadresser är fortfarande unika — en dubblett ger nu ett tydligt felmeddelande även vid redigering av användare.
v4.112US #278 (Feature #276, 2 av 4): granskning/matchning av kopplingsförfrågningar — admin (alla lag), föreningsansvarig (sin förening) och lagansvarig (sina lag) ser nu väntande förfrågningar i tre ytor (Lagets försäljning, Föreningens försäljning, adminpanelen), inte bara lagansvarig. Matchningslistan visar numera bara lagets bekräftade barn-lagmedlemmar (Feature #269-rostern), inte hela laget, och flaggar de som saknar en registrerad vårdnadshavare i systemet (blockerade, server-side 400). "Skicka vidare" ersätter "Länka" — sätter en ny mellanstatus matched, inte slutlänkning; barnets vårdnadshavare godkänner i steg 2 (kommande US #279). Avvisning kan nu ha en valfri motivering (rejectionReason, Flyway V77).
v4.111US #277-uppföljning (upptäckt vid funktionstest): en aktiverad kopplings (autoLinked) effekt på Handla-vyns subtext ("— för {barnnamn}") krävde en hel sidladdning för att synas — invalidateMyProfileCache() nollställer bara profil-cachen, men showSection('kundvy') kör bara om initKundvy() (som läser profilen) om initialized['kundvy'] också nollställs. Samma mönster som redan finns i addKundTeam/setKundActiveTeam/removeKundTeam — tillagt i submitMinInfoBarnRequest().
v4.110US #277 (Feature #276, 1 av 4): ny sektion Koppla köp till barn i Min information — en köpare kan skicka in en kopplingsförfrågan (lag + barnnamn) via POST /api/barnRequests. Är köparen redan en bekräftad vårdnadshavare för ett barn med det namnet i det laget (rbeChildRegistration, US 274) aktiveras kopplingen direkt utan granskning; annars väntar den på granskning (steg 1/2, kommande US #278/#279). Separat process från barnanmälan ovan (US 272/273/281) — rör vems köp som tillfaller barnet, inte barnets medlemskap i laget. Återupplivar rbeKopareBarnRequest-mekanismen (v2.5) som förlorade sin enda köpar-ingångspunkt när Feature #269 gjorde om registreringsformulärets barnfält.
v4.109US #281-uppföljning: granskningsvyn Barnanmälningar (i alla tre ytor — Lagets försäljning, Föreningens försäljning, adminpanelen) fick en fjärde filterknapp Återkallade — statusen har funnits sedan köparen fick möjlighet att dra tillbaka en anmälan (US 275), men var osynlig för lagansvarig/föreningsansvarig/admin eftersom GET /api/childRegistrations bara vitlistade Väntar/Bekräftad/Avvisad. Visar "Återkallad av vårdnadshavaren" i stället för granskarnamn, eftersom reviewedByGuid för en återkallad rad pekar på köparen själv, inte en granskare.
v4.108US #281: ny sektion Anmäl barn i Min information (bredvid "Vem vill du stödja?") — en redan registrerad kund kan anmäla ytterligare barn utan att gå via registreringsflödet, med samma flervals-/samtyckeskomponent som vid registrering. Ny endpoint POST /api/myChildRegistrations skriver direkt till rbeChildRegistration; anmälan hamnar i samma granskningskö (US 274) och syns direkt i köparens egen statusvy (US 275).
v4.107US #275-uppföljning: sektionen Mina barnanmälningar flyttad från Handla-vyn till Min information (bredvid Din prenumeration) — det är den flik AC:et syftar på med "Mina sidor". Ingen ändring i vad som visas eller hur återkallelse fungerar, bara placeringen.
v4.106US #274-uppföljning: granskningsvyn Barnanmälningar (i alla tre ytor) visar nu även vårdnadshavarens e-postadress bredvid namnet — namn ensamt räckte inte som identifierare, e-post är den faktiska nyckeln. Gäller både huvudlistan och dublett-varningen.
v4.105US #275: ny sektion Mina barnanmälningar i kundvyn (visas bara om köparen har någon anmälan) — listar status (Väntar på godkännande / Bekräftad / Avvisad / Återkallad) på köparens egna barnanmälningar och låter köparen dra tillbaka en väntande anmälan med bekräftelsedialog. En anmälan som blivit bekräftad via en annan vårdnadshavares godkännande (US 274) visas korrekt som Bekräftad, inte som en separat väntande post. En redan bekräftad anmälan kan inte dras tillbaka härifrån.
v4.104US #274-uppföljning: fliken Barnanmälningar (i alla tre ytor) fick en statusfilter-knappgrupp — Väntande/Bekräftade/Avvisade — så granskaren kan se historik, inte bara den aktiva kön. Avvisade rader visar den valfria motiveringen; bekräftade/avvisade rader visar vem som granskade och när.
v4.103US #274: nya flikar Barnanmälningar i Lagets försäljning, Föreningens försäljning och adminpanelen — lagansvarig ser sitt/sina lag, föreningsansvarig ser hela sin förening, admin ser allt, allt scopat av en och samma GET /api/childRegistrations. Bekräftelse skapar barnet som riktig lagmedlem (rbeChildRegistration → rbeIdentification+rbeTeamIdentificationConnection); avvisning kräver ingen motivering men tillåter en valfri. Möjliga dubbletter (namn+lag matchar en annan väntande/bekräftad anmälan, t.ex. två vårdnadshavare) flaggas för granskaren — bekräftelse av en löser automatiskt den andra mot samma lagmedlem, aldrig en dubblett i rostern.
v4.102US #273: en ny, separat kryssruta — skild från villkorsrutan — kräver eget informerat samtycke för att registrera ett barn som lagmedlem i systemet. Visas bara när minst ett komplett barn är ifyllt i barnsektionen. Godkännandet loggas som en egen rad i rbeConsentEvent (consentContext = 'barnRegistrering'). Integritetspolicyn (v1.2) har ett nytt avsnitt om denna specifika behandling (rättslig grund: samtycke från vårdnadshavare).
v4.101US #272: köpare kan nu anmäla flera barn vid registrering (#kund-onboarding och #profil-bekraftelse) — repeterbara rader med namn + lag (valbart bland föreningens fulla lagslista, oberoende av köparens egna lagval), knappen "Lägg till barn". Varje komplett rad skapar en väntande post i den nya, fristående tabellen rbeChildRegistration — inte längre en koppling mot rbeKopareBarnRequest.
v4.100US #271: registreringsflödet (#kund-onboarding och #profil-bekraftelse) ställer nu en explicit fråga "Har du barn som är aktiva i föreningen och som du vill anmäla?" (Ja/Nej, ej förikryssad) i stället för att visa barnfältet implicit när exakt ett lag är valt. Barnsektionen visas nu bara efter Ja, oavsett hur många lag köparen kryssat för sig själv.
v4.99US #270-uppföljning: kryssrutan "Barn" i Användare-fliken är nu redigerbar även för befintliga användare (var tidigare bara valbar vid nyskapande) — så en lagmedlem som fanns innan den här funktionen kan markeras som barn i efterhand och därmed dyka upp i Barnkonton-fliken. E-post krävs inte längre heller vid redigering om Barn är ikryssat. Barnets ev. redan befintliga e-postadress skrivs numera aldrig över av "Skapa barnkonto" — bara identiteter som helt saknar e-post får den satt automatiskt.
v4.98US #270-uppföljning: fliken Barnkonton (Lagets försäljning) visar nu hela lagets roster av barn, inte bara de som redan har ett konto — rader utan konto får badgen "Saknar konto" och en knapp "Skapa konto" som öppnar "Skapa barnkonto" med lag och person redan förvalda. GET /api/auth/code/list utgår nu från lagets roster (barn-lagmedlemmar) i stället för bara befintliga rbeChildAuth-rader.
v4.97US #270-uppföljning: fliken Användare kan nu också skapa barnkonto-identiteter direkt — ny kryssruta "Barn" i "Lägg till användare"-formuläret gör e-post valfritt. Personen visas med en Barn-badge i listan; lägg till hen i rätt lags roster via lagets "Medlemmar"-knapp (Lag-fliken) som ett separat steg.
v4.96US #270: Barnkonton skapas nu i två steg — lagansvarig lägger först till barnet i lagets roster (namn + "barn"-markering, ingen inloggning) via ny knapp "Lägg till lagmedlem", och skapar därefter inloggningsuppgifter genom att välja personen i en dropdown i "Skapa barnkonto" i stället för att skriva in namn/personnummer på nytt. Sidofix: lagansvarig kan nu hämta sin egen lagroster (GET /api/teamMembers/{teamId}), tidigare felaktigt admin-only.
v4.95Avräkning-flikens totaltabell ("Totalt för FöreningsSälj") fick två nya kolumner: Väntar bekräftelse och Väntar leverans — totalsumman av samma antal som redan visas per förening i tabellen nedanför.
v4.94Avräkning-flikens totalkort ersatta med en totaltabell ("Totalt för FöreningsSälj"), samma mönster som Lönsamhet-fliken (v4.93). Inga fält ändrade, bara layouten.
v4.93Lönsamhet-flikens totalkort ersatta med en totaltabell ("Totalt för FöreningsSälj") med kolumnerna Antal sålda, Intäkt, Kostnad, Täckningsbidrag, Andel spelare/lag/förening, Bruttomarginal, Nettomarginal och ny Nettomarginal %. Per produkt-tabellen fick också en Nettomarginal %-kolumn.
v4.92US #259-uppföljning: Lönsamhet-flikens gamla "Bruttomarginal"-kolumn heter nu "Täckningsbidrag" — den innehåller fortfarande andelen som ska betalas ut till spelare/lag/förening, och är alltså inte FöreningsSäljs egna vinst. Ny kolumn/kort "Bruttomarginal" = täckningsbidraget minus den andelen, dvs FöreningsSäljs verkliga bruttovinst. Nettomarginalen räknas nu på denna riktiga bruttomarginal (tidigare felaktigt på täckningsbidraget).
v4.91US #259: Lönsamhet- och Avräkning-flikarna visar nu även nettomarginal — bruttomarginalen (exkl. moms) minus svensk bolagsskatt (20,6 %) — per produkt/order/förening och totalt, som ett rent beräknat komplement till bruttomarginalen. Lönsamhet-flikens marginal-kolumn/kort heter nu "Bruttomarginal (exkl. moms)" för konsekvens med Avräkning (v4.90).
v4.90Avräkning-flikens Marginal-kolumn/kort heter nu "Brutto marginal" (kr och %), för att tydliggöra att det är marginalen före kostnader som inte syns i vyn (t.ex. FöreningsSäljs egna omkostnader) — inte samma sak som ett nettoresultat.
v4.89Buggfix (US #258-uppföljning): Avräkning-flikens marginal räknade fel — momsjusterade felaktigt hela FöreningsSäljs andel (redan minus förenings-/lags-/spelarandelen), vilket omedvetet strök moms från distributionsbeloppet också. Rätt ordning: räkna sälj-minus-köp-marginalen exkl. moms mot hela försäljningsvärdet först, dra sedan av förenings-/lags-/spelarandelen (en flat kr-summa utan momshantering) efteråt. Exempel: 179 kr sälj/139 kr köp/25 % moms/15 kr föreningsandel gav tidigare 20 kr, rätt svar är 17 kr. Lönsamhet-fliken (v4.88) var redan korrekt.
v4.88Buggfix (US #258): marginalen i Lönsamhet- och Avräkning-flikarna samt i Lagerbatcher-modalens förhandsvisning/batchlista räknades tidigare inkl. moms, vilket lät momsen på försäljningen dra ner den redovisade marginalen felaktigt. Marginalens kronbelopp räknas nu exklusive moms (produktens vatRate), momsjusterat per rad så att ordrar/föreningar med blandade momssatser summeras korrekt. Marginal %-kolumnerna är oförändrade i värde.
v4.87Admin kan nu radera en felregistrerad inköpsbatch i Lagerbatcher-modalen (US #257), via en ny "Radera"-knapp och endpointen DELETE /api/products/{productId}/batches/{batchId}. Tillåts bara om batchen är helt oförbrukad — annars visas ett felmeddelande. Raderingen minskar produktens lagersaldo i samma transaktion och loggas.
v4.86Ny "Testdata"-knapp i Inställningar-fliken (US 263), bara synlig i testmiljön: rensar ordrar, lagerförbrukning, utbetalningar, fakturastatus och prenumerationer direkt i testdatabasen (ny endpoint POST /api/testDataReset, admin-skyddad och spärrad server-side mot produktion) utan att behöva trigga Clean & Seed-pipelinen. Lagerbatcher återställs i stället för att raderas; konton, föreningar, lag och produkter rörs inte.
v4.85Orderstatusflödet Bekräftad → Levererad → Utbetald (US 260, Feature #194): admin kan nu markera en bekräftad order som levererad i Betalningar-fliken (med leveransdatum), och Betalningar-fliken har filter för Levererade och Utbetalda samt en kolumn för leveransdatum. Avräkningen görs nu på levererade ordrar (tidigare Bekräftad/Levererad) och perioden går på leveransdatum; Avräkning-fliken visar även antal Bekräftade, ej levererade. När en utbetalning blir Registrerad (bekräftat underlag eller direktregistrering) får dess ordrar den nya statusen Utbetald, och annullering återställer dem till Levererad. En levererad eller utbetald order kan makuleras som ett undantag med orsaken Retur (varan återförs till lagret); en redan utbetald order flaggas Justering krävs. Ny kolumn rbeOrder.deliveredAt (V72). Avräkning-flikens "Skapa underlag"-resultat visas nu i en egen ruta med genvägen Öppna Utbetalningar i stället för en liten textrad bredvid knappen.
v4.84Avräkning-fliken (US #206, Feature #194 B5): admin kan nu skapa ett underlag för en vald förening och period, som föreningen kan använda som bokföringsunderlag och grund för sin faktura. Underlaget kan laddas ner som CSV eller PDF (ordernr, datum, kundnamn, belopp inkl./exkl. moms, moms per skattesats, FöreningsSäljs andel, föreningens andel, samt redan utbetalt/kvar att betala). Underlaget skapar en ny rad i samma utbetalningstabell som en registrerad utbetalning (status "Utkast") — beloppet och ordrarna fryses direkt, så nedladdning av samma underlag alltid ger identiska siffror. När betalningen sedan sker bekräftas underlaget via en ny knapp i utbetalningshistoriken ("Bekräfta betalning"), som fyller i datum/betalsätt och ändrar status till "Registrerad". Historiska utbetalningar (redan registrerade) kan också laddas ner som CSV/PDF i efterhand.
v4.83Utbetalning och fakturastatus (US #203/#204) kan nu kopplas ihop: fakturastatusraden får en valfri koppling till en specifik utbetalning (ny kolumn payoutGuid, Flyway V70) via en dropdown i redigeringsformuläret. Kopplingen syns åt båda hållen — Fakturastatus-tabellen visar utbetalningens belopp/datum, och utbetalningshistoriken visar kopplad fakturastatus. Helt valfritt eftersom fakturan ofta kommer före eller efter utbetalningen.
v4.82Buggfix: Bekräfta/Redigera betalning-modalen (Betalningar-fliken) sparade fel betalningsdatum — det datum admin valde i popupen ignorerades helt. Orsaken var att fälten pcm-amount/pcm-date/pcm-msg/pcm-submit-btn av misstag delade id med motsvarande fält i "Annullera utbetalning"-modalen (tillagd i US #203), vilket gjorde att document.getElementById(...) alltid träffade fel modals dolda element. Annulleringsmodalens fält har nu egna id:n (poc-*).
v4.81Betalningar-fliken: kolumnen "Datum" heter nu "Order datum" (för att tydliggöra att den visar orderns läggningsdatum, inte betalningsdatum) och en ny egen kolumn "Betalningsdatum" har lagts till. Kolumnen "Betalning" visar nu bara betalsätt och referens, inte längre datumet (som tidigare stod ihopklumpat där).
v4.80Buggfix: Betalningsdatum och Återbetalningsdatum (Betalningar-fliken) kunde visas ett dygn fel i listan för kvällstider nära midnatt, på grund av en dubbel tidszonsförskjutning mellan inmatning och visning. Fältet skickas nu som en riktig UTC-tidsstämpel till servern i stället för lokala siffror rakt av. Upptäckt på order #1028.
v4.79Avräkning-fliken (US #203): registrering av utbetalning blockeras nu (409) om vald period överlappar en tidigare registrerad, icke-annullerad utbetalning för samma förening — utan spärren kunde samma ordrar räknas in i flera utbetalningar och föreningen bli dubbelbetald. Varningen visas redan i formuläret innan admin försöker skicka in det (ny fältdata overlappingPayout i GET /api/payouts/calculateAmount).
v4.78Avräkning-fliken (US #203): beloppfältet i "Registrera utbetalning" är nu skrivskyddat och beräknas automatiskt av servern utifrån föreningens andel av realiserade ordrar i vald period (ny endpoint GET /api/payouts/calculateAmount), i stället för att skrivas in fritt. POST /api/payouts ignorerar numera helt ett inskickat belopp och beräknar alltid själv — täpper till en lucka där ett felaktigt inmatat belopp inte hade upptäckts.
v4.77Avräkning-fliken: admin kan nu registrera, historik-granska och annullera utbetalningar till en förening direkt från "Per förening"-tabellen (ny knapp Utbetalningar, US #203, Feature #194 B2) — nya endpoints POST /api/payouts, GET /api/payouts och POST /api/payouts/{guid}/cancel. Korrigering av en felregistrerad utbetalning sker genom att annullera och registrera en ny rad, inte genom redigering. Ny sektion Fakturastatus längst ner i samma flik (US #204, Feature #194 B3) visar och låter admin sätta fakturastatus (Ej mottagen/Mottagen/Matchad/Avviker) per förening och period, oberoende av utbetalning — nya endpoints GET/PUT /api/payoutInvoiceStatus.
v4.76Avräkningsöversikten (US 202, Feature #194 B1) fick ett valfritt periodfilter (från/till, baserat på ordrarnas betalningsdatum) samt nettning mot registrerade utbetalningar: nya kolumner/kort Utbetalt och Kvar att betala per förening (mot rbePayout, US 205 — visar 0 kr tills utbetalningsregistrering, US #203, är byggd). Rader i "Per förening" är nu klickbara och filtrerar "Per order"-tabellen till vald förening. Kolumnen "Väntar på bekräftelse" heter nu "Ordrar som väntar på bekräftelse".
v4.75Avräkning-fliken (US 200) fick en Omsättning-kolumn/kort (radernas fulla försäljningsvärde inkl. moms, = summan av de fyra andelarna) i både förenings- och orderöversikten, för att kunna se den totala omsättningen bredvid fördelningen. Ny fältdata revenue i GET /api/payoutStats.
v4.74Avräkning-fliken (US 200) fick marginal och marginal % (FöreningsSäljs andel minus fruset FIFO-inköpspris) samt en ny tabell "Per order" som visar varje realiserad order som en egen rad med en totalsummerad rad längst ner — samma mönster som Lönsamhet-fliken. Ny endpoint-data byOrder i GET /api/payoutStats.
v4.73Ny adminflik "Avräkning" (US 200, Feature #193 A4): kumulativ summering av föreningens/lagets/spelarens/FöreningsSäljs andel per förening, byggt på de frysta fördelningsbeloppen (US 199). Bekräftad/Levererad räknas som realiserat; Ny/Väntande visas bara som antal väntande ordrar (ingen kronsumma, fördelningen är okänd förrän ordern bekräftas); Avbruten/Återbetald ger ingen avräkning. Ny endpoint GET /api/payoutStats. Grundstomme för avräkningsöversikten per förening (US #202). En tidigare version av USen visade felaktigt bruttoordersumma i föreningens/lagansvarigs egna försäljningsöversikter — det reverterades.
v4.72Fördelningsbeloppen till spelare/lag/förening/FöreningsSälj fryses nu per FIFO-förbrukningsrad (US 199, Epic #192), inte bara per batch — en orderrad som sträcker sig över flera batcher med olika fördelning redovisas därmed korrekt per batch, permanent oberoende av senare ändringar. Skulle FöreningsSäljs andel bli negativ (t.ex. säljpris sänkt efter batchregistrering) klampas den till 0 och de tre andra skalas ner proportionellt. Nya kolumner på rbeOrderRowStockConsumption (Flyway V68). Ingen ny UI.
v4.71Förhandsvisningen i "Registrera inleverans" (US 198) visar nu även en första rad med kundens pris (produktens säljpris), så FöreningsSälj-andelen och marginalen kan sättas i relation till vad kunden faktiskt betalar utan att behöva växla flik.
v4.70Lagerbatch-modalen (US 198) fick en UX-omarbetning: bredare dialog (modal-xl) och intern scroll (modal-dialog-scrollable) så formulär + batchlista ryms utan sidscroll på en stor skärm men fönstret ändå kan scrollas vid behov; registreringsformuläret är nu ett tydligt avgränsat kort med en egen sektion för spelare-/lag-/föreningsfördelningen, och den beräknade FöreningsSälj-andelen/marginalen visas nu i en bredare, tydligare ruta under fälten istället för klämd i en fjärde kolumn.
v4.69Förhandsvisningen i "Registrera inleverans" (US 198) visar nu även marginalen (FöreningsSälj-andelen minus inköpspriset, med marginal i %) — inte bara bruttoandelen — och uppdateras live även när inköpspriset ändras.
v4.68"Registrera inleverans"-formuläret (US 198) visar nu en live-beräknad FöreningsSälj-andel direkt under spelare-/lag-/föreningsfälten, uppdaterad medan admin fyller i beloppen — samt en varning om summan skulle överstiga produktens säljpris, innan batchen sparas.
v4.67Lagerbatcher kan nu redigeras (US 255, ny endpoint PUT /api/products/{productId}/batches/{batchId}): inleveransdatum, notering och inköpspris (medan batchen är öppen) är alltid redigerbara; antal levererat kan sänkas men aldrig under redan förbrukat antal; spelare-/lag-/föreningsfördelningen kan bara ändras om batchen är helt oförbrukad (låses i formuläret annars). "FöreningsSälj (vinst)" heter nu "FöreningsSälj (marginal)", konsekvent med Lönsamhet-flikens terminologi. "Vinst %" heter nu "Marginal %".
v4.66Batchlistan (US 197) visar nu även "Vinst %" — FöreningsSäljs vinst i förhållande till batchens inköpspris (vinst / inköpspris). Tomt om inköpspriset är 0 (division med noll).
v4.65Rättat beräkning (US 197): batchlistans "FöreningsSälj (vinst)"-kolumn (tidigare "FöreningsSälj") drog inte bort batchens inköpspris — visade alltså FöreningsSäljs andel av försäljningsvärdet, inte den faktiska vinsten. Kolumnen är nu säljpris minus spelare-/lag-/föreningsandelen **minus inköpspriset**.
v4.64Batchlistan (US 197) visar nu även en "FöreningsSälj"-kolumn — residualen (produktens säljpris minus summan av spelare-/lag-/föreningsandelen), beräknad direkt i klienten så admin kan se vad som faktiskt blir kvar för FöreningsSälj per batch.
v4.63Lagerbatch-modalen (US 197, Epic #192) kan nu ta emot per-batch fördelning: kr per förpackning till spelare, lag och förening anges (valfritt, default 0) vid registrering av en inleverans. FöreningsSäljs andel beräknas som residual och lagras inte separat. Summan av de tre får inte överstiga produktens säljpris — avvisas annars med 400. Nya kolumner rbeStockBatch.spelareAmountPerUnit/lagAmountPerUnit/foreningAmountPerUnit (Flyway V67). Värdena är låsta efter registrering, samma princip som inköpspriset.
v4.62Ny flik "Lönsamhet" (US 254, Feature #248 L6, sista delen av lagerhanteringen): visar FöreningsSäljs interna marginal (säljpris minus fruset FIFO-inköpspris från rbeOrderRowStockConsumption) per produkt, per order och summerat för ett valfritt datumintervall (ny endpoint GET /api/marginStats). Endast synlig för FöreningsSälj-admin — påverkar aldrig avräkningen till föreningen (Feature #193, oförändrad).
v4.61Adminpanelen varnar nu för lågt lagersaldo (US 253, Feature #248 L5): produkter vars saldo understiger en tröskel märks med en varningsbadge och en ljus radmarkering i produktlistan. Tröskeln har ett globalt defaultvärde (nytt "Lager"-kort i Inställningar, nyckeln stock_lowStockThreshold i rbeAppSetting) som kan åsidosättas per produkt via ett nytt fält i produktformuläret (rbeProduct.lowStockThreshold, Flyway V66).
v4.60Lagersaldot förbrukas nu automatiskt enligt FIFO när en order bekräftas (US 252, Feature #248 L4): äldsta öppna batchen töms först, och exakt vilken batch/vilket inköpspris som användes per orderrad sparas i rbeOrderRowStockConsumption (fryst pris, oberoende av senare batchändringar — underlag för kommande marginalberäkning). Räcker inte lagret loggas en tydlig varning i stället för att tillåta negativt saldo. Makuleras en betald order (→ Återbetald) återförs motsvarande antal till samma batch(er) automatiskt. Ingen ny UI — synligt genom att Batcher-modalens antal kvar och produktens lagersaldo nu ändras vid orderbekräftelse/makulering.
v4.59Adminpanelens lagerbatch-modal (US 251) kan nu registrera inleveranser: admin anger antal, inköpspris, valfritt inleveransdatum och valfri leverantörsnotering, vilket skapar en ny rbeStockBatch-rad och ökar produktens lagersaldo direkt (ny endpoint POST /api/products/{productId}/batches, atomär transaktion). Batchlistan visar nu även antal levererat och leverantörsnotering. Ny kolumn rbeStockBatch.supplierNote (Flyway V65).
v4.58Adminpanelens produktflik (US 250) visar nu lagersaldo per produkt (ny kolumn, rbeProduct.stockQuantity) samt en "Batcher"-knapp per rad som öppnar en modal med produktens öppna lagerbatcher (inköpspris, antal kvar, inleveransdatum), sorterat äldst först. Ny endpoint GET /api/products/{productId}/batches. Rent read-only-läge — datamodellen kom i US 249 (V64), saldot börjar underhållas i kommande US:er (#251 inleverans, #252 FIFO-förbrukning).
v4.57Bugg (US 246): fyra endpoints i kund.ts för adminpanelens Roller-flik (kundens lag- och föreningskopplingar) svarade 404 eftersom SWA:s /admin//admin/*-routingregler av misstag fångade alla /api/admin/*-anrop innan Functions nåddes. Flyttat till samma /api/userManage/*-prefix som redan används för samtyckeshistoriken (US 244) — ingen ändring av staticwebapp.config.json.
v4.56Buggfix (US 185): rollbadgen i den nya kontomenyn syntes aldrig i adminpanelens header — initAdminNav() avbryter tidigt på /admin-sidan eftersom nav-länkarna den letar efter bara finns i index.html, så badgen sattes aldrig. Hämtar nu profilen separat efter admin-behörighetskontrollen. Även kontomenyn låg för långt in mot mitten i adminpanelens header (ingen flex-spacer utan nav-menyn); #header-auth har nu margin-left: auto så den alltid hamnar i högerkanten, som på huvudsidan.
v4.55UX (US 185): kontot-/utloggningsmenyn i headern visade tidigare bara en liten textpil (▾) utan kant/bakgrund i vilotillstånd — otydligt att det var en klickbar meny. Ny person-ikon i triggerknappen, SVG-chevron som roterar när menyn öppnas, synlig kant/bakgrund på knappen samt en logout-ikon bredvid "Logga ut" i dropdownen.
v4.54CSS-fix (US 184): länken "← Startsidan" i adminpanelens header överlappade rubriken "Föreningssälj Admin"/"Idrottspasta Admin" (h1 ärvde Bootstraps standardstorlek 2.5rem i en 64px hög header) och hade låg kontrast. Egen h1-styling, större avstånd och ljusare länkfärg.
v4.53Avbokningssidans header (US 120) visade miljömedveten text ("Idrottspasta"/"Föreningssälj") som index.html:s riktiga header aldrig gör — den använder alltid samma logga (foreningssalj-logo-vit.svg) oavsett miljö. Bytt till den riktiga loggan och samma header-back-link-mönster som adminpanelen.
v4.52Avbokningssidans sidfot (US 120) återanvände fel mönster — .legal-footer från villkor.html (utspridd, mindre text) i stället för appens vanliga sidfot (.footer, centrerad, samma stil som syns på t.ex. Mina beställningar). Bytt till samma markup/klasser som resten av appen använder.
v4.51CSS-fix: sidfoten på de fristående publika sidorna (villkor.html, integritetspolicy.html och avbokningssidan från US 120) låg inte kvar längst ner i visningsfönstret när innehållet var kort — den hamnade direkt under innehållet i stället. .legal-page är nu en sticky-footer-layout (flex-kolumn, min-height: 100vh) som håller header/footer fast och låter innehållet fylla mellanrummet.
v4.50UX-fix på avbokningssidan (US 120): sidan var obrandad — bara vit bakgrund och en generisk rubrik, inget som visade att det var Föreningssäljs/Idrottspastas sida. Återanvänder nu exakt samma header/footer-mönster som villkor.html/integritetspolicy.html — mörk header med varumärkesnamn (miljömedvetet: Idrottspasta på test, Föreningssälj i prod) och en "Till startsidan"-länk, samt samma sidfot med länkar till villkor/integritetspolicy. Ingen egen CSS längre — sidan återanvänder helt .legal-*-klasserna och Bootstraps knapp-/alert-stilar.
v4.49UX-fix på avbokningssidan (US 120): den visade tidigare varken ordernummer, produkter eller belopp innan man klickade "Avboka beställningen" — bara en generisk fråga. Sidan hämtar nu orderdetaljerna via en ny läs-endpoint (GET /api/orders/{orderGuid}/cancel-by-token, samma token) och visar radspecifikation och totalbelopp innan bekräftelsen. Är beställningen redan hanterad (betald/makulerad/levererad) visas det tydligt i stället för en knapp som ändå skulle ge fel. Länken till Mina sidor är nu en riktig klickbar länk, inte bara text.
v4.48Avbokningslänken från US 120 finns nu även i själva orderbekräftelsen (engångsköp och prenumerationens återkommande order), inte bara i påminnelsemailet — kunden kan avboka direkt utan att vänta på en påminnelse. Samma tidsbegränsade token, samma nya sida, ingen inloggning krävs.
v4.47Betalningspåminnelser (US 120) gäller nu alla obetalda beställningar, inte bara prenumerationens återkommande auto-ordrar — engångsköp i Handla-vyn får också automatiska påminnelser och auto-makulering. Påminnelsemailet visar nu en fullständig radspecifikation (produkter, antal, à-pris, summa) och en "Avboka beställningen"-länk som avbokar direkt, utan inloggning, via en tidsbegränsad token. Dagantalen för påminnelse 1/2 och auto-makulering (tidigare hårdkodade 7/14/21) är nu konfigurerbara i databasen (rbeAppSetting, V63). Ny endpoint POST /api/orders/{orderGuid}/cancel-by-token.
v4.46Omgodkännande av villkor och integritetspolicy vid ändring (US 245). Ändras villkor.html eller integritetspolicy.html sakligt efter registreringen (versionskonstanterna i legal.ts bumpas) möts en redan inloggad kund av en icke stängningsbar dialog vid nästa sidladdning — samma icke förikryssade kryssruta som registreringsflödet. Kunden kommer inte vidare in på sajten förrän den nya versionen bekräftats. Servern jämför kundens senaste rad i rbeConsentEvent mot de aktuella versionerna (GET /api/myprofile returnerar nu consentOutdated) och loggar en ny rad via POST /api/myprofile/reconsent med consentContext = 'login' vid bekräftelse. Barnkonton (isChild=1) är undantagna — de går aldrig igenom registreringsflödet och omfattas inte av villkoren.
v4.45UX-fix: knapparna Redigera/Samtycken/Ta bort i fliken Användare låg tidigare i en fast 180px-kolumn och radbröt fult (Samtycken hamnade ensam på egen rad). Åtgärdskolumnen för Användare är nu bredare (280px) med flex-layout och jämna mellanrum så alla tre knappar ryms på en rad; Ta bort (destruktiv) flyttad sist.
v4.44Samtyckeshistoriken (US 244, v4.43) flyttad ut från Roller-dialogen till en egen "Samtycken"-knapp per rad i fliken Användare, som öppnar en fristående modal. Historiken kan bli lång (en rad per beställning, inte bara registreringen) och behövdes inte alltid synas när man bara ska hantera roller.
v4.43Admin kan nu slå upp en kunds samtyckeshistorik (US 244). Ny sektion i Roller-dialogens kundvy listar alla rader ur samtyckesloggen (kontext, godkända versioner, tidpunkt, user agent) med en "Visa text"-knapp som öppnar den exakta HTML-text kunden godkände vid det tillfället — inte bara den aktuella. Ny tabell rbeLegalDocumentVersion sparar en snapshot av villkoren och integritetspolicyn varje gång en ny version publiceras; en pipeline-anrop (POST /api/legal/snapshotCapture) fångar automatiskt texten efter varje deploy. Historiska versioner (villkor 1.0, policy 1.0 och 1.1) tillbakafyllda från git-historiken. Nya endpoints GET /api/userManage/{guid}/consentEvents och GET /api/legal/snapshot/{typ}/{version}.
v4.42Orderbekräftelsen och de två betalningspåminnelserna om den återkommande påfyllningen refererar nu explicit till att ordern är en del av prenumerationen och betalas i förskott via Swish, enligt villkoren kunden godkände vid registreringen. Den andra betalningspåminnelsen (dag 14) säger nu uttryckligen att en automatisk makulering sker utan kostnad eller andra negativa följder. Länken till Min information i mejlens sidfot heter nu "Hantera din prenumeration" i stället för "påfyllningen" (US 236).
v4.41Godkänt villkor och integritetspolicy synligt för kunden (US 238). "Min information" visar nu senaste godkännandet: datum och version av både användarvillkoren och integritetspolicyn, länkade till respektive dokument. Konton som registrerades före US 235 saknar historik och visar istället "Ingen uppgift registrerad". GET /api/myprofile returnerar nu ett consent-objekt från rbeConsentEvent.
v4.40Avsluta prenumeration (US 242). Kunden kan nu avsluta sin prenumeration från panelen i Min information efter en bekräftelsedialog — ett definitivt stopp: inga fler beställningar eller påminnelser, redan lagda ordrar påverkas inte, inga negativa följder. Panelen visar därefter "Avslutad {datum}" och hur man börjar om (lägg en ny beställning i Handla, vilket återaktiverar prenumerationen med färsk frekvens). Kunden får ett bekräftelsemejl. Ny adminflik Prenumerationer: lista med köpare, förening/lag, frekvens, nästa beställningsdatum och status, filtrerbar (Aktiva/Pausade/Avslutade/Alla), med en Avsluta-knapp för support (cancelledByGuid visar om kunden eller en admin gjorde det). Nya endpoints POST /api/mySubscription/cancel, GET /api/subscriptions och POST /api/subscriptions/{guid}/cancel. Nya fält på rbeSubscription (V59).
v4.39Prenumerationspanelen i Min information (US 241): kunden kan nu pausa sin prenumeration (bekräftelsedialog; inga automatiska ordrar skapas medan den är pausad), återuppta den (nästa beställning sätts till idag + intervallet), skjuta fram nästa beställning med +2 veckor, +1 månad eller ett eget datum (bakåtdatum avvisas), och trycka Beställ nu för att lägga nästa påfyllningsorder direkt — samma kodväg som den dagliga motorn, med Swish-mejl. "Beställ nu" på en pausad prenumeration återupptar den samtidigt. Nya endpoints POST /api/mySubscription/{pause|resume|orderNow} och PATCH /api/mySubscription med nextReminderDate. Nytt värde kund för pausorsak (V58). De återkommande påfyllningsordrarna visas nu även i kundens Mina beställningar så att de går att öppna och betala i appen.
v4.38Prenumeration och återkommande beställningar (US 240). I Handla-vyn väljer kunden påfyllningstakt — varje dag, varannan dag eller var tredje dag — och en lagd order skapar en prenumeration. En daglig motor (/api/reminders/dispatch, schemalagd pipeline) lägger nästa order automatiskt när intervallet löpt ut, skickar Swish-mejl, och för obetalda auto-ordrar två betalningspåminnelser (dag 7 och 14) innan ordern makuleras automatiskt dag 21 och prenumerationen pausas. Min information visar frekvens, nästa beställningsdatum och status, och frekvensen går att ändra där. Admin får en daglig sammanfattning. Ny tabell rbeSubscription (V57).
v4.37Integritetspolicyn (/integritetspolicy.html) uppdaterad till version 1.1 efter en granskning mot GDPR art. 28 och leverantörernas faktiska avtalsvillkor. Swish är borttaget ur listan över personuppgiftsbiträden — Föreningssälj skickar inga personuppgifter dit, och köparens bank respektive Getswish är självständigt personuppgiftsansvariga. Cloudflare är tillagt som biträde (DNS, trafikförmedling och cachning — all kundtrafik passerar där). Azure Communication Services listas inte längre som egen motpart utan ingår i Microsoft. Punkt 6 om tredjelandsöverföring är omformulerad från det för kategoriska "ingen överföring sker" till att uppgifterna lagras inom EU/EES men att biträden i begränsad omfattning kan behandla dem utanför, med stöd av standardavtalsklausulerna. Underlaget dokumenterat på wiki-sidan Dataskydd (US 243).
v4.36Registreringsflödet: en obligatorisk, icke förikryssad kryssruta måste bockas i för att skapa konto — kunden godkänner användarvillkoren och bekräftar att hen tagit del av integritetspolicyn, med en synlig klartextruta som förklarar att varje beställning är en återkommande prenumeration som kan pausas eller avslutas när som helst. Godkännandet valideras även på servern (400 om det saknas) och loggas per användare med tidsstämpel och de versioner av villkor/policy som gällde (US 235, V56).
v4.35Nytt: skarpa användarvillkor (/villkor.html) och integritetspolicy (/integritetspolicy.html) publicerade som egna sidor, daterade och versionsmärkta. Prenumerationen och den automatiska ombeställningen beskrivs som avtalsvillkor; det framgår uttryckligen att ingen inkasso, kravhantering eller kreditupplysning förekommer och att en makulerad order saknar negativa följder. Länkas från registreringsflödet, orderbekräftelsen (sida + mejl) och sidfoten på kund- och adminsidan (US #233 + #234).
v4.34Handla-vyn: rutan "Leverans & kontakt" i varukorgspanelen omgjord — ikonrader i ett eget infokort i stället för en punktlista under köpknappen, dämpad typografi och telefonnumret som klickbar WhatsApp-länk (US 230, UX-puts av US 229).
v4.33Handla-vyn: varukorgspanelen visar nu en fast ruta "Leverans och kontakt" med leveranstid enligt överenskommelse (dagligen och flexibelt), personlig leverans i samband med träning eller match, adressen Linbodavägen 105 samt kontaktuppgift till Rolf Elveberg på WhatsApp. Rutan syns även med tom varukorg, innan kunden slutför beställningen (US 229).
v4.32Betalningar-fliken: Visa-knappen öppnar nu det fullständiga kvittot (säljaruppgifter, moms per rad, totaler exkl./inkl. moms, utskriftsknapp) för betalda ordrar — status Bekräftad, Levererad eller Återbetald — i stället för orderdetaljen. Övriga statusar visar orderdetaljen som förut (US 228).
v4.31Betalningar-fliken: ny knapp Visa sist i varje orderrad öppnar en skrivskyddad orderdetalj identisk med den inloggade kundens ordervy — orderrader, kund- och leveransuppgifter, lag, förmånstagare, säljare (US 227).
v4.30Betalningar-fliken: kolumnen Ordernr heter nu OrderNr/KvittoNr och visar orderns sekventiella nummer (t.ex. #1042) — samma nummer kunden ser på sitt kvitto — i stället för de första tecknen av det interna order-ID:t. Äldre ordrar utan nummer visar fortfarande ID-referensen (US 182).
v4.29Makulering: tredje orsak "Kunden ångrade sig" för återbetalning av en betald order. Orsakerna är nu kontextberoende — obetald order visar Testorder / Ingen betalning, betald order visar Testorder / Kunden ångrade sig (US 226, V55).
v4.28Nytt: admin kan makulera en order i Betalningar-fliken. Obetald order (Ny/Väntande) → status Avbruten; bekräftad (betald) order → status Återbetald med återbetalningsdatum och -referens (Swish-återbetalningen görs manuellt). Makulering kräver en orsak: Testorder eller Ingen betalning. Ny snabbknapp "Makulerade" som listar avbrutna och återbetalda ordrar med orsak. Makulerade/återbetalda ordrar räknas inte längre med i förmånstagar- och produktstatistiken (US 226, V54).
v4.27Städning: den gamla base64-kolumnen för produktbilder är borttagen ur databasen nu när alla produkter använder blob-URL:er. Ingen synlig förändring — produktbilder visas som förut i kundvyn och adminlistan (US 225, blob-migreringen Fas 4).
v4.26Prestanda: produktbilderna ligger nu som filer i Azure Blob Storage i stället för inbäddade i produkt-API:t. Produktlistan (/api/products) går från ~53 KB till under 2 KB per produkt, bilderna cachas hårt av webbläsaren och laddas parallellt med lazy-loading. Kundvyn och orderrutan delar nu en gemensam produktcache. Adminvyn: produktbild som inte ändras vid redigering behålls (US 224, Prestandaanalys Problem 2, Fas 2).
v4.25Prestanda: sidladdningen kör inte längre de publika anropen (inloggningsval + produktlista) i kö bakom inloggningskontrollen — produktlistan börjar laddas direkt och parallellt med auth. Inloggad användare: profilen (/api/myprofile) och inloggningsstatusen (/api/auth/me) hämtas nu en gång per sidladdning i stället för två–tre. Snabbare tid till att produkterna syns, färre API-anrop. Även preconnect/defer på externa skript i index.html (US 223, Prestandaanalys Problem 3).
v4.24Prestanda: Microsoft-inloggningen (admin och kund) hamnar rätt direkt när popupen stänger — huvudfönstret väcks nu av ett storage-event i stället för att vänta in nästa sekundtick i en pollingloop. Tar bort ~0,5 s (upp till 1 s) dötid per inloggning (US 222).
v4.23Prestanda: produktlistan (/api/products) skickar nu cache-headers så att svaret kan mellanlagras i webbläsaren och (i prod) av Cloudflare — produktlistan laddar snabbare, särskilt första besöket efter en period av inaktivitet (US 217, del A). Adminvyns produktlista påverkas inte. Produktändringar kan slå igenom för kund med upp till några minuters fördröjning.
v4.22Nytt: e-postkvitto (US 177) skickas till köparen när admin bekräftar betalning — säljaruppgifter, momsuppställning per skattesats och kvittonummer som matchar in-app-kvittot; bugfix så att säljar-/lagansvarig-skapade ordrar också får ordernummer
v4.21Swish-referens (meddelande, QR-kod, "Öppna Swish"-länk) i kundvyn och orderbekräftelse-mailet visar nu det sekventiella ordernumret (t.ex. "Order 1042") i stället för de 8 första tecknen av order-GUIDet (US 180)
v4.19Orderbekräftelse (US 178): e-post med Swish QR-kod, djuplänk och manuella betalningsdetaljer skickas till köparen vid orderläggning; adminnotifiering (US 179): e-post till ADMIN_NOTIFICATION_EMAIL vid ny order; ny publik endpoint /api/swishQr genererar QR-kod som PNG
v4.18Buggfix: admin-inloggning i prod — miljödetektion, msal_pending_token-polling och korrekt relay-URI (auth.elveberg.se) tillagda i login.html; branding visar nu Föreningssälj i prod
v4.17Buggfix: MSAL-inloggning fungerar nu korrekt på iOS Safari i prod — _isProd-detektionen använder nu URL-parserns normaliserade Punycode-hostname (samma fix som v4.16 tillämpade på _cookieDomain)
v4.16Buggfix: ml_session-cookie sätts nu alltid med Punycode-domän via URL-parser — window.location.hostname kan returnera Unicode/ä på iOS vilket är ogiltigt i cookie domain=-attributet
v4.15Buggfix: explicit domain= i ml_session-cookie för att lösa cookie-matchningsproblem på IDN-domänen föreningssälj.se
v4.14Buggfix: magic link-inloggning fungerar nu på Android Chrome öppnat via Gmail — bytte SameSite=Strict till SameSite=Lax på ml_session-cookien
v4.13Buggfix: magic link-inloggning fungerar nu korrekt i iOS Chrome öppnat via "Öppna i Chrome" — sidan laddas om med ?loggedin=1 istället för att försöka använda cookien i samma sidladdning
v4.12Kundvy: beställningspopupen visar nu status och, vid "Väntar på betalning", Swish-betalningssektion med QR-kod och "Jag har betalat"-knapp
v4.11UX: "Vem vill du stödja?" flyttad från Handla-sidan till Min information; klickbar "Ändra lag"-länk i undertexten på Handla leder dit
v4.10Buggfix: rollbadge i headern uppdateras nu direkt efter registrering; Kund-rollen genererar alltid ett rollkort; "Dina roller"-sektionen döljs för användare med enbart Kund-roll
v4.9Onboarding: gammal onboarding ersatt med profilbekräftelse (e-post readonly, namn förifyllt från MSAL, förening/lag/barnnamn kvar); magic link-tokenfel visar nu bannern istället för alert()
v4.8Produkter: inaktiva produkter visas nu i adminlistan med "Aktivera"-knapp; ny admin-endpoint returnerar alla produkter oavsett status
v4.7Kundvy: produktkort visar "x st/förp · Jmf-pris y kr/st", helbredd-knapp och renare prisblock
v4.6Produkter: produktbild (upload + förhandsvisning), styckprisberäkning och momsvisning i adminpanelen; bild och styckpris visas i kundvyn
v4.5UX: "Logga in med e-post" öppnar nu en modal istället för inline-dropdown i navbaren
v4.4Onboarding: alla nya användare registreras automatiskt som kund, roll-väljaren borttagen från huvudsidan
v4.3Buggfix: magic link-inloggning sätter nu session-cookie korrekt även bakom SWA/Cloudflare-proxy
v4.2Personnummer är inte längre obligatoriskt vid lägg till användare
v4.1Bugg: inloggningsknappar (e-post, lösenord) syntes inte vid cold start — API-felfall och frontend-defaults uppdaterade
v4.0MSAL.js-autentisering: SWA-auth ersatt med Microsoft Authentication Library (popup-flöde, PKCE); Google-inloggning borttagen; Bearer-tokenvalidering i API via Azure AD JWKS
v3.1Header och nav samlas i en rad; auth-info (e-post, utloggning) döljs i dropdown bakom rollbadgen
v3.0Rebrand: Idrottspasta ersatt med Föreningssälj — ny logotyp i header och favicon, uppdaterad Om oss-text
v2.99Ny adminflik Betalningar: admin matchar och bekräftar ordrar med betalningsdatum, betalnings-ID och betalningssätt (Swish/Kontant); lagansvarig kan ej längre sätta Bekräftad
v2.98Betalningsbekräftelse: kund klickar "Jag har betalat" → orderstatus Väntande; lagansvarig bekräftar → Bekräftad; kund ser användarvänlig statustext i orderhistoriken
v2.97Betalningsskärmen är nu device-aware: mobil ser "Öppna Swish"-knapp med förifylld djuplänk, desktop ser QR-kod; mobilanvändare kan visa QR via toggle för betalning från annan mobil
v2.96Swish QR-URL fix: CDN ändrad till jsdelivr.net (CSP-kompatibel); amt och cur=SEK tillagda i Swish-URL; edit=amt,msg
v2.95Swish QR genereras dynamiskt med ordernummer förifyllt i meddelandet via app.swish.nu-länk; statisk bild borttagen
v4.20Kvitto i kundvyn: vid status Bekräftad/Levererad visas fullständigt kvitto (säljaruppgifter, sekventiellt kvittonr/ordernr, köparinfo, moms per rad, summering exkl./inkl. moms) med utskriftsknapp; nytt orderNumber-fält (INT, sekvens från 1001) på rbeOrder (V51)
v2.94Swish QR uppdaterad till kompakt Swish-kort (swish-qr-small-foreningssalj.png) som gör det möjligt för kunden att fylla i ordernummer
v2.93Swish QR ersatt med officiell Swish-genererad bild (swish-qr-foreningssalj.png); qrcodejs-biblioteket borttaget; belopp och ordernummer visas separat
v2.92Swish QR innehåller nu bara Swish-numret (kompatibelt med Swish Företag); belopp och ordernummer visas separat med uppmaning att fylla i manuellt i Swish-appen
v2.91Admin Inställningar visar nu SWISH_NUMBER-miljövariabelns status: grönt märke med värdet om konfigurerad, rött märke om saknas
v2.90Swish QR-kod visas i varukorgen efter lyckad beställning: kunden scannar koden för att betala rätt belopp till föreningssäljs Swish-nummer; ordernummer i meddelandet för spårbarhet
v2.89Lag, förmånstagare och säljare tilldelas nu via pennikon i orderdetaljvyn; förmånstagare visas i orderrubrikens högerkolumn; buggfix: lagtilldelning skickade teamId men backend förväntade sig teamGuid
v2.88Buggfix: SQL-felen "Invalid column name 'teamId'" i myOrders/create och beneficiaryStats; kbr.teamId refererade en kolumn som droppades i V34 — ersatt med kbr.teamGuid direkt utan INNER JOIN
v2.87Barnnamn i mini-onboarding: nytt frivilligt fält visas när exakt ett lag är valt, skickas till register-API och skapar barnkopplingsförfrågan direkt vid registrering
v2.86Förmånstagare per order: nytt fält på rbeOrder, automatisk koppling via godkänd barnkoppling (kundvy), valfritt val i säljar-modal, redigera-ikon i ordertabeller, Per förmånstagare-flik i Lagets/Föreningens försäljning
v2.85Buggfix: tilldela Lagmedlem via rollmodalen anropade fel endpoint och skapade lagansvarig; nu används rätt endpoint (teamMembers) och Ta bort rensas korrekt via teamMembers DELETE
v2.84Tilldelningar-dropdown visar nu bara lagmedlemmar (connectionType='lagmedlem'), inte kunder som stödjer laget
v2.83Admin Lag-vy: Medlemmar-räknaren och medlemslistan visar nu bara lagmedlemmar (connectionType='lagmedlem'), inte kunder; admin-tillägg av lagmedlem sätter korrekt connectionType; Lagmedlem-rollkontroll i myActiveRole filtrerar på connectionType
v2.82Kunder visas inte längre felaktigt som Lagmedlem: rbeTeamIdentificationConnection får connectionType-kolumn som skiljer kundlagsval ('kund') från lagmedlemskap ('lagmedlem'); myroles deriverar nu bara roleId=7 för lagmedlem-kopplingar
v2.81Mini-onboarding sätter nu activeTeamGuid direkt vid registrering om exakt ett lag valts (tidigare möttes kunden av "välj lag" trots att de nyss valt ett); UNIQUE-constraint på rbeIdentification.email förhindrar dubbelprofiler vid race condition
v2.80Magic link-epost bär nu föreningskontext (?ID) så att bannern visas även i ny flik/webbläsare; utloggning blockerar sessionsåtervinning i initKundvy via _forceAnonymous-flagga
v2.79Fliken Aktuell försäljning borttagen
v2.78Inloggningsuppmaning i Handla omformulerad; knapp "Logga in med kod" omdöpt till "Logga in med lösenord" inkl. hjälptexter
v2.77Handla synlig för alla besökare och ny startsida; produktkatalog tillgänglig utan inloggning; varukorg sparas i localStorage och överlever magic link-flöde och sidladdning; nav omordnad med Handla först
v2.76Startsida för ej inloggade besökare ändrad till Om oss
v2.75Om oss-sektionen uppdaterad med tydlig beskrivning av syftet: kunden beställer direkt, föreningen slipper vara säljare
v2.74Standardlag i kundvyn sparas nu permanent: rollbyte rensar inte längre valet, nytt lag åsidosätter inte befintligt standard, UI-text förtydligad till "Välj som standard" / "Standard"-badge
v2.73Kundvy: "Vem vill du stödja?" visar nu vilket lag som är aktivt (badge "Aktivt") med Välj-knapp för att byta; rubriken synkas med aktivt lag; borttag av aktivt lag nollställer nu kopplingen korrekt
v2.72Föreningens försäljning: ny "Säljare"-tabb med säljarstatistik, "Alla ordrar"-tabb, tydligare fliketiketter, varningskort för okopplade ordrar
v2.71Kundköp visas nu med badge "Kundköp" i säljarcellen istället för köparens namn; sellerIdentificationGuid nuljas för customer-ordrar
v2.70Lagtabellen på Föreningens försäljning visar nu ordrar utan lagkoppling som en separat rad; tfoot-totalen stämmer med summary-kortet
v2.69Köp registreras nu korrekt på den förening kunden väljer i kundvyn; föreningsstatistik inkluderar orders utan lagkoppling
v2.68Rollkort visas inte längre dubbelt i Min information för roller med föreningskoppling
v2.67Kund-rollen kan nu aktiveras med föreningskoppling utan felmeddelande om föreningsansvarig
v2.66Startsidan-länk i admin-headern landar nu direkt på Min information-fliken
v2.65Kund-rollen visas nu korrekt i Min information efter att ha tilldelats via adminpanelen
v2.64Länk tillbaka till startsidan tillagd i adminpanelens header
v2.63Min försäljning-länk visas endast när säljare- eller extrasäljare-rollen är aktiv; döljs vid rollbyte
v2.62Lagets försäljning-länk visas endast när lagansvarig-rollen är aktiv; döljs vid rollbyte
v2.61Admin-länk visas endast när admin-rollen är aktiv; döljs vid rollbyte
v2.60Föreningsansvarig-länk visas endast när föreningsansvarig-rollen är aktiv; döljs vid rollbyte
v2.59Handla-länk och kundvy visas endast när kund-rollen är aktiv; länken döljs vid rollbyte
v2.58Rätta datatyp på rbeRole.role och rbeTeam.teamName till NVARCHAR för korrekt hantering av å/ä/ö
v2.57Kund kan kopplas till flera föreningar: ny tabell rbeKundOrgConnection, nya endpoints /api/kundOrgs, korrekt routing i adminpanelen baserat på orgConnectionType
v2.56Rätta felmeddelande vid tilldelning av Kund-rollen: nollställer requiresOrganization-flaggan som felaktigt satts på Kund i databasen
v2.55Tillåt beställning utan lag (kräver förening), föreningsansvarig ser org-direkta orders, ny rubrik 'Handla och bidra' med kontextrad, förbättrad lag-sektion med tydligare copy
v2.54Rätta Min handel för nya kunder: dölj tom barn-badge, korrigera teamId→teamGuid i onboarding, skapa teamkoppling vid köpare-registrering och förvälj förening i lagformulär
v2.53Fixa nav-flik "Min handel": synliggör kundvy-länken vid registrering/auto-assign och skicka kunder direkt till Min handel vid inloggning
v2.52Automatisk kundroll vid föreningslandning: auto-assign, mini-onboarding, multi-lag i kundvy och admin-kund-laghantering
v2.51Visa föreningsnamn för lag i rollpopup; åtgärda inkonsekvent borttagning av lagansvarig-roll
v2.50Föreningsspecifik landningssida: ?ID-param, banner och förvald förening i onboarding
v2.49Fixa barnkonton i lagets försäljning efter V34-migrering (teamGuid)
v2.48Åtgärda inaktuell data vid flikbyte i Lagets försäljning; fixa teamGuid vid säljartilldelning
v2.47Visa kund-roll i Dina roller; redigera egna uppgifter
v2.46Koppla lagansvarig/föreningsansvarig till rätt lag/förening vid tilldelning