Skip to content

Migrering: Base44 → Billettsalg

Dette dokumentet kombinerer den opprinnelige analysen av funksjons-gap mellom dirigentens Base44-app og vår Billettsalg-app, sammen med detaljert migreringssporing etter v0.9.0.

Del 1: Analyse av funksjons-gap

Opprinnelig fra gap-analyse som sammenligner alle 13 sider i billettsalgsskjema.base44.app med vår implementasjon.

Sammendrag

Etter å ha analysert alle 13 sider fra dirigentens eksisterende Base44-app, har vår app sterke grunnfunksjoner (multi-organisasjon, arrangementer, salgsregistrering). Alle kritiske og mellomprioriterte gap er lukket. Det eneste gjenværende gapet er intern meldingsutveksling, som ble nedprioritert til fordel for eksterne kommunikasjonsverktøy.

Funksjonssammenligningsmatrise

FunksjonDirigentens appVår appGap-nivå
Medlemsfunksjoner
Registrer salg✅ Fullt skjema med konsert, billetttyper, betalingsmåte✅ RegisterSaleView✅ Likeverdig
Bestill billetter (forespørsel)✅ /OrderTickets-rute✅ OrderTicketsView✅ Likeverdig
Mine salg – oversikt✅ Oppsummeringskort + fanevisning✅ HistoryView✅ Likeverdig
Billettansvarlig-funksjoner
Administrer bestillinger✅ EditorOrders – godkjenn/avslå/lever bestillinger✅ OrdersView (admin)✅ Likeverdig
Bestillingshistorikk✅ Full historikk med arkivfunksjon✅ OrdersView (historikkfane)✅ Likeverdig
Tildelinger✅ Per-medlem tildeling per konsert✅ AllocationsView✅ Likeverdig
Interne meldinger✅ Admin ↔ Billettansvarlige meldingsutveksling❌ Ingen meldinger🟢 Lav
Kassererfunksjoner
Rapporter✅ Multi-fane: Per medlem/organisasjon/konsert/type/Ticketmaster/Alle✅ ReportsView (6 faner)✅ Likeverdig
CSV-eksport✅ Eksportknapp✅ Excel-eksport finnes✅ Likeverdig
Adminfunksjoner
Organisasjonsadministrasjon✅ CRUD med medlemstall, statusmerke✅ OrganizationsView✅ Likeverdig
Konsertadministrasjon✅ Rike kort med priser, kapasitet, fremdriftsindikatorer, avgifter✅ EventsView/EventFormView✅ Likeverdig
Brukeradministrasjon✅ Full brukeradmin✅ UsersView✅ Likeverdig
Ticketmaster-integrasjon✅ Dedikert /AdminTicketmaster-side✅ Eksternt salg per forestilling✅ Likeverdig
Billetttyper
Voksen/Barn✅ Likeverdig
Student✅ Forhåndsdefinert knapp✅ Likeverdig
Senior✅ Forhåndsdefinert knapp✅ Likeverdig
Avtalt spesialpris✅ Forhandlede priser✅ Forhåndsdefinert knapp✅ Likeverdig
Billettavgift✅ Per type, per konsert✅ Avgiftsfelt på TicketType✅ Likeverdig
Bestillingsflyt
Bestillingsstatuser✅ Ventende → Godkjent → Levert / Avbrutt✅ Ventende/Godkjent/Levert✅ Likeverdig
Arkiver bestillinger per konsert✅ Massearkiveringsfunksjon✅ Arrangementsspesifikk massearkivering (#25)✅ Likeverdig
Multi-organisasjon
Flere organisasjoner✅ Filtrer etter organisasjon på tvers av sider✅ OrganizationSelector✅ Likeverdig
Organisasjonsmerker på konserter✅ Viser hvilken organisasjon per konsert✅ Likeverdig

Implementerte funksjoner

Bestillings-/forespørselsflyt for billetter ✅

Dirigentens app har et billettbestillingssystem der medlemmer ikke bare registrerer salg, men kan bestille billetter fra en billettansvarlig:

  1. Medlem sender bestilling via /OrderTickets (konsert, antall per type)
  2. Bestillingen får status «Ventende»
  3. Billettansvarlig ser den i /EditorOrders, kan godkjenne/avslå
  4. Etter godkjenning → «Godkjent»
  5. Ansvarlig leverer billetter → «Levert»
  6. Kan avbrytes → «Avbrutt»

Implementering fullført:

  • Ny entitet: TicketOrder med statusflyt (api/src/shared/types.ts)
  • Ny medlemsvisning: OrderTicketsView.vue – bestill billetter med forestillingsvalg
  • Ny adminvisning: admin/OrdersView.vue – administrer bestillinger med godkjenn/lever/avbryt
  • API-endepunkter: /api/orders, /api/orders/:id/approve, /api/orders/:id/deliver, /api/orders/:id/cancel
  • Databasecontainer: ticketOrders (partisjonert etter organizationId)
  • Ruter: /order-tickets for medlemmer, /admin/orders for admins
  • i18n: Engelske og norske oversettelser

Billettavgift ✅

Hver konsert kan ha ulike avgifter per billetttype:

  • Eksempel: «Voksen: 30 kr» avgift, «Barn: 25 kr» avgift
  • Avgifter vises separat fra billettprisen
  • Avgifter spores i rapporter («Total billettavgift: 500 kr»)

Implementering fullført:

  • Avgiftsfelt lagt til på TicketType (api/src/shared/types.ts)
  • Spores i registreringer, bestillinger, eksternt salg og rapporter
  • Vises i konsertkort (EventsView) og arrangementsskjema (EventFormView)
  • Avgiftstotaler inkludert i Excel/CSV-eksporter

Bestillingshistorikk med arkiv ✅

  • ✅ Historikkfane i admin/OrdersView.vue som viser leverte/avbrutte bestillinger
  • ✅ Tabell med: Dato, Medlem, Arrangement, Billettfordeling, Total, Status
  • ✅ Oppsummeringskort med totalt antall bestillinger, totalt antall billetter og total omsetning
  • ✅ Støtte for arkivflagg via archived-feltet på TicketOrder og PATCH /api/orders/:id/archive, tilgjengelig siden v0.9.0
  • ✅ Likeverdig arrangementsspesifikk massearkivering levert i #25 med et endepunkt for forhåndsvisning og et avgrenset endepunkt for arkivering

Det opprinnelige arkivendepunktet håndterte én bestilling om gangen. Arkivflagget alene ga ikke samme funksjon som Dirigent-appens arkivering per arrangement. Issue #25 legger til denne separate funksjonen og beholder det individuelle endepunktet. Issue #315 strammer inn kvalifiseringen: Kansellerte bestillinger er fortsatt kvalifiserte, mens oppgjorte bestillinger krever et gyldig fakturagrunnlag som bare inneholder salg og en utstedt faktura. Samlet arkivering overstyrer aldri regelen.

Faktura- og oppgjørslivssyklus ✅

Issue #315 skiller tre begreper som eldre migreringsnotater behandlet som ett:

  • Oppgjort betyr at en ansvarlig godkjente avstemmingen og låste fakturagrunnlaget for solgte billetter.
  • Fakturert betyr at en faktura ble utstedt eller sendt til medlemmet.
  • Innbetaling er fortsatt uavhengig av fakturaflagget.

Fakturahandlingen per medlem og arrangement dekker aktive registreringer og kvalifiserte oppgjorte trykte bestillinger. Inntekt fra trykte billetter kommer fra validert solgt antall og prisene fra bestillingstidspunktet, aldri den opprinnelige bestillingstotalen. Eksisterende oppgjorte bestillinger får ikke oppdiktede fakturatidspunkt. Eksisterende arkiverte bestillinger forblir arkivert til de gjenopprettes.

Forbedrede billetttyper ✅

  • Forhåndsdefinerte knapper for Student, Senior og Spesial lagt til i EventFormView.vue
  • Forhåndsinnstillinger inkluderer standardpriser og avgifter (f.eks. Student: 150 kr / 10 kr avgift)
  • Duplikatnavnvalidering forhindrer at samme forhåndsinnstilling legges til to ganger
  • Systemet støtter fortsatt fullt fleksible egendefinerte typer

Tildelinger ✅

  • Allocation-entitet i api/src/shared/types.ts
  • AllocationsView.vue for administrering av tildelinger
  • Fullt API: GET/POST /api/allocations, DELETE /api/allocations/:id, GET /api/my-allocations
  • Medlemsendepunkt for tildelingsstatus: GET /api/allocations/members
  • Tildelingsoppsummeringskort for billettansvarlige på dashbordet

Forbedrede rapporter ✅

ReportsView gir alle visninger fra dirigentens app:

  • ✅ Per medlem (Per medlem-fane)
  • ✅ Per organisasjon (Per organisasjon-fane)
  • ✅ Per konsert (Per arrangement-fane)
  • ✅ Per billetttype (Per type-fane)
  • ✅ Ticketmaster (eksterntsalg-fane)
  • ✅ Alle salg (komplett liste-fane)

Implementering: ReportsView.vue med 6-fanesystem, datoperiodefiltrering, medlemsfilter-nedtrekksliste og CSV/Excel-eksport.

Forbedrede konsertkort ✅

  • ✅ Fremdriftsindikator: 27 / 200 solgt med visuell stolpe (fargekodet: grønn ≥90%, blå ≥70%, gul ≥50%, grå <50%)
  • ✅ «Igjen»-teller (gjenværende)
  • ✅ Billettavgiftseksjon (lillafarget avgiftsvisning per type)

Utsatte funksjoner

Intern meldingsutveksling 🟢 Lav prioritet

Enkel meldingsutveksling mellom admins og billettansvarlige. Anbefaling: Utsett dette. E-postvarsler kan være tilstrekkelig.


Datamodellendringer

Nye entiteter

typescript
// Billettbestillings-/forespørselssystem
interface TicketOrder {
  id: string;
  organizationId: string;
  eventId: string;
  showtimeId?: string;
  showtimeDateTime?: string;
  showtimeLabel?: string;
  requestedBy: string;
  requestedByName: string;
  requestedByEmail: string;
  tickets: {
    ticketTypeId: string;
    ticketTypeName: string;
    quantity: number;
    unitPrice: number;
    fee: number;
  }[];
  totalQuantity: number;
  totalAmount: number;
  totalFees: number;
  status: "pending" | "approved" | "delivered" | "awaitingReconciliation" | "settled" | "cancelled";
  soldQuantity?: number;
  soldTypeQuantities?: SoldTypeQuantity[];
  returnedQuantity?: number;
  invoiceBasis?: InvoiceBasis;
  invoicedAt?: string;
  invoicedBy?: string;
  invoicedByName?: string;
  archiveOverride?: OrderArchiveOverrideEvidence;
  approvedBy?: string;
  approvedByName?: string;
  approvedAt?: string;
  deliveredBy?: string;
  deliveredByName?: string;
  deliveredAt?: string;
  cancelledBy?: string;
  cancelledByName?: string;
  cancelledAt?: string;
  cancelReason?: string;
  createdAt: string;
  updatedAt: string;
}

// Billetttildeling
interface TicketAllocation {
  id: string;
  organizationId: string;
  eventId: string;
  userId: string;
  userName: string;
  userEmail: string;
  allocations: {
    ticketTypeId: string;
    ticketTypeName: string;
    quantity: number;
  }[];
  totalAllocated: number;
  createdBy: string;
  createdByName: string;
  createdAt: string;
  updatedAt: string;
}

Endrede entiteter

typescript
// Legg til avgift på TicketType
interface TicketType {
  // ... eksisterende felter
  fee?: number; // Avgift per billett
}

Rollestruktur – sammenligning

RolleDirigentens appVår app
MedlemRegistrer salg, Bestill billetter, Mine salg✅ Samsvar
BillettansvarligBestillinger, Bestillingshistorikk, Tildelinger, Meldinger✅ Samsvar (unntatt meldinger)
KassererRapporter✅ Admin har tilgang
AdminKor, Konserter, Brukere, Ticketmaster, osv.✅ Samsvar

Del 2: Detaljert migreringssporing (etter v0.9.0)

Generert: 31. januar 2026 Sist oppdatert: Mars 2026 (gjennomgang av implementering etter v0.9.0)

Sammendrag

KategoriBase44-funksjonerVår implementeringGap-nivå
BrukeradministrasjonMulti-rolle per bruker (billettansvarlig, kasserer)roles[] på OrganizationMembership✅ Ferdig
Arrangementer/KonserterKompleks prising (pris + avgift per type)✅ Avgift per billetttype (implementert i v0.9.0)✅ Ferdig
BestillingsflytFull arbeidsflyt (ventende→godkjent→levert)✅ Implementert✅ Ferdig
TildelingerAuto-opprett ved levering✅ AllocationsView (implementert i v0.9.0)✅ Ferdig
Eksternt salgDedikert Ticketmaster-side✅ Dedikert TicketmasterView✅ Ferdig
MeldingerE-postvarsler (via Meldinger-side)Ikke implementert🔵 Lav
Rapporter6-fane rapportsystem med avgiftssporing✅ 6-fane ReportsView med avgifter (implementert i v0.9.0)✅ Ferdig
BrukergodkjenningVentende/godkjent status✅ Via medlemskap✅ Ferdig
Navigasjon4 rollebaserte seksjoner✅ 4 seksjoner (Medlem/Billettansv./Kasserer/Admin)✅ Ferdig

Rask sammenligning

AspektBase44VårVinner
BillettpriserPris + Avgift separert✅ Pris + Avgift separertLikt (likeverdig)
Flere forestillinger❌ Ingen✅ Full støtteVår
Fleksible billetttyper❌ Hardkodet voksen/barn✅ Dynamiske typerVår
Bestillings-revisjonslogg❌ Minimal✅ Full historikkVår
Korreksjonsforespørsler❌ Ingen✅ Fullt systemVår
Invitasjonslenker❌ Ingen✅ Delbare lenkerVår
E-postmeldinger✅ Har (via Meldinger)❌ IngenBase44 (lav prio)
Rapportfiltre✅ Datoperiode, medlem✅ Arrangement, medlem, datoperiodeLikt (likeverdig)

1. Brukeradministrasjon

Base44 brukermodell

typescript
{
  email: string
  full_name: string
  first_name: string
  last_name: string
  phone_number: string
  organization_id: string                    // Enkel primær organisasjon
  roles: string[]                     // ["billettansvarlig", "kasserer"]
  extended_role: "editor" | null      // Admin-nivå tilgang
  approval_status: "pending" | "approved"
  is_verified: boolean
  _app_role: "user" | "admin"         // App-nivå rolle
}

Vår brukermodell

typescript
// User (global identitet)
{
  id: string
  email: string
  name: string
  isSuperAdmin?: boolean
}

// OrganizationMembership (per organisasjon)
{
  organizationId: string
  userId: string
  role: "member" | "ticketManager" | "treasurer" | "admin"
  roles?: string[]                   // ["billettansvarlig", "kasserer"]
  approved: boolean
}

Gap og anbefalinger

FunksjonBase44VårAnbefaling
Telefonnummer✅ Har❌ ManglerLegg til phone?: string på User
For-/etternavn✅ Separate❌ Enkelt nameBehold enkelt navn (enklere)
Flere roller✅ Array ["billettansvarlig", "kasserer"]roles?: string[] (implementert i v0.9.0)✅ Ferdig
Utvidet rolle"editor" for delvis adminticketManager / treasurer rollehierarki✅ Ekvivalent (implementert i v0.9.0)
Godkjenningsstatuspending/approvedapproved: boolean✅ Ekvivalent

Prioritet: ✅ Ferdig – Kun telefonnummer gjenstår som et mindre gap


2. Arrangementer/Konserter (prismodell)

Base44 konsertmodell

typescript
{
  name: string;
  date: string; // "2026-03-09"
  location: string;
  description: string;
  organization_id: string;

  // Medlemspriser
  adult_price: 350;
  adult_ticket_fee: 30; // Avgift LAGT TIL prisen
  child_price: 175;
  child_ticket_fee: 25;

  // Spesialpriser med avgifter
  special_prices: [
    { name: "Student", price: 150, ticket_fee: 10 },
    { name: "Senior", price: 200, ticket_fee: 25 },
    { name: "Avtalt spesialpris", price: 85, ticket_fee: 15 },
  ];

  // Ticketmaster-priser (eksternt salg)
  ticketmaster_price: 350;
  ticketmaster_adult_fee: 30;
  ticketmaster_child_price: 200;
  ticketmaster_child_fee: 15;

  max_tickets: 200;
  is_active: boolean;
}

Vår Event + TicketType-modell

typescript
// Event
{
  id: string
  organizationId: string
  name: string
  date: string
  location?: string
  description?: string
  venueCapacity: number              // Per forestilling
  active: boolean
  salesLocked?: boolean
  showtimes?: Showtime[]
}

// TicketType (separat entitet)
{
  id: string
  eventId: string
  organizationId: string
  name: string                       // "Adult", "Child", "Student"
  price: number
  fee: number                        // Billettavgift (implementert i v0.9.0)
  ticketmasterPrice?: number         // Ekstern prisoverstyrning
  ticketmasterFee?: number           // Ekstern avgiftsoverstyrning
  sortOrder: number
}

Gap og anbefalinger

FunksjonBase44VårAnbefaling
Billettavgifter✅ Separat avgift per typefee-felt på TicketType (implementert i v0.9.0)✅ Ferdig
Voksen/Barn innebygd✅ Faste felter❌ Fleksible typer⚠️ Vår løsning er MER fleksibel
Spesialpriser✅ Dynamisk array✅ Via TicketType✅ Bedre – våre typer er entiteter
Ticketmaster-priser✅ Separate felterticketmasterPrice/ticketmasterFee (implementert i v0.9.0)✅ Ferdig
Maks billetter✅ Per konsert✅ Per forestilling✅ Bedre – per forestilling er mer fleksibelt
Flere forestillinger❌ Ingen✅ Showtimes-array✅ Vi er bedre

Prioritet: ✅ Ferdig – Avgiftsfelter og Ticketmaster-priser implementert


3. Bestillingsflyt

Base44 TicketOrder-modell

typescript
{
  concert_id: string;
  organization_id: string;
  member_email: string;
  member_name: string;
  adult_tickets: number; // Fast felt
  child_tickets: number; // Fast felt
  special_orders: [{ name: "Student", quantity: 5 }];
  status: "pending" | "approved" | "delivered" | "cancelled";
  notes: string; // Medlemsnotater
  editor_notes: string; // Admin-notater
  is_archived: boolean;
}

Vår TicketOrder-modell

typescript
{
  id: string
  organizationId: string
  eventId: string
  eventName: string
  showtimeId?: string

  requestedBy: string
  requestedByName: string
  requestedByEmail: string

  // Fleksible billettelementer
  tickets: [
    { ticketTypeId, ticketTypeName, quantity, unitPrice }
  ]
  totalQuantity: number
  totalAmount: number

  status: "pending" | "approved" | "delivered" |
    "awaitingReconciliation" | "settled" | "cancelled"
  soldQuantity?: number
  soldTypeQuantities?: SoldTypeQuantity[]
  returnedQuantity?: number
  invoiceBasis?: InvoiceBasis
  invoicedAt?: string
  invoicedBy?: string
  invoicedByName?: string

  // Full revisjonslogg
  approvedBy?: string
  approvedByName?: string
  approvedAt?: string
  deliveredBy?, deliveredByName?, deliveredAt?
  cancelledBy?, cancelledByName?, cancelledAt?
  cancelReason?: string

  note?: string
  adminNote?: string               // Admin-/redaktørnotater (implementert i v0.9.0)
  adminNoteBy?: string
  adminNoteAt?: string
  archived?: boolean               // Arkiver gamle bestillinger (implementert i v0.9.0)
  archiveOverride?: OrderArchiveOverrideEvidence
}

Sammenligning

FunksjonBase44VårVinner
Statusflyt✅ Lik✅ LikLikt
Fast Voksen/Barn❌ Mindre fleksibelt✅ Dynamiske typerVår
Redaktørnotater✅ HaradminNote (implementert i v0.9.0)Likt
Arkivert-flagg✅ Hararchived (implementert i v0.9.0)Likt
Fakturagrunnlag bare for salg❌ Nei✅ Låses ved oppgjørVår
Revisjon av utstedt faktura❌ Minimal✅ Status per medlem og arrangement med stabil aktørVår
Bevis for arkivoverstyring❌ Nei✅ Varig adminbevisVår
Revisjonslogg❌ Mindre detaljer✅ Full loggVår
Forestillingsstøtte❌ Ingen✅ HarVår

Prioritet: ✅ Ferdig – Vår modell er nå funksjonskomplett med full likeverdighet


4. Billetttildelinger

Når en bestilling merkes som «levert», oppretter Base44 en tildelingspost. Vi har en dedikert AllocationsView (/admin/allocations) som gir forhåndstildeling av billetter til medlemmer per billetttype, med tildelingsadministrasjon per medlem. (Implementert i v0.9.0)

Prioritet: ✅ Ferdig


5. Billettsalg (direkte medlemssalg)

FunksjonBase44VårAnbefaling
MedlemssalgVia TicketSaleVia Registration✅ Ekvivalent
Eksternt salgVia TicketSaleVia ExternalSale✅ Renere separasjon
Avgiftssporing✅ Per salg✅ Via TicketType-avgift (implementert i v0.9.0)✅ Ferdig
Forestillingsstøtte❌ Ingen✅ HarVår er bedre

Prioritet: ✅ Ferdig – Avgiftsberegninger utledes fra TicketType-avgiftsfeltet


6. Meldinger (e-postvarsler) 🔵 LAV PRIORITET

Dette er IKKE meldinger i appen – det ser ut til å være et e-postsendingssystem:

  • Admin skriver melding med emne/innhold
  • Sender e-post til enkeltmedlem eller hele organisasjonen
  • Sporer om e-posten er lest (via lesebekreftelser eller lenkesporing)

Vår implementering: Ingen – Vi støtter oss på ekstern e-post foreløpig.

Anbefaling: UTSETT – Svært lav prioritet.


7. Rapporter ✅ IMPLEMENTERT

Vi har en dedikert ReportsView (/admin/reports) med 6 faner (implementert i v0.9.0):

  • Per medlem (Medlemmer) – Salg gruppert per medlem med fakturasporing
  • Per kor (Organisasjoner) – Fordeling på tvers av organisasjoner
  • Per konsert (Arrangementer) – Salg på arrangementsnivå
  • Per type (Typer) – Fordeling per billetttype
  • Ticketmaster – Eksternt salg via Ticketmaster
  • Alle salg (Alle) – Komplett transaksjonsliste

Prioritet: ✅ Ferdig – Fullt 6-fane rapportsystem med avgiftssporing.


8. Brukergrensesnitt/navigasjonssammenligning

Side-for-side-sammenligning

Base44-sideVår ekvivalentStatusMerknader
/HomeRegisterSaleView✅ EkvivalentSamme funksjonalitet
/OrderTicketsOrderTicketsView✅ ImplementertBestillingsflyt
/MySalesHistoryView✅ EkvivalentMedlemmets salg
/EditorOrdersadmin/OrdersView✅ ImplementertVentende/Godkjent-faner
/OrderHistoryadmin/OrdersView✅ KombinertHistorikkfane i OrdersView
/AdminAllocationsadmin/AllocationsView✅ ImplementertDedikert side (implementert i v0.9.0)
/Messages❌ Ingen🔴 MANGLERMå implementeres
/AdminReportsadmin/ReportsView✅ Implementert6-fane rapporter (implementert i v0.9.0)
/AdminOrganizationssuper-admin/OrganizationsView✅ Ekvivalent
/AdminConcertsadmin/EventsView✅ EkvivalentVi kaller dem «Arrangementer»
/AdminTicketmasteradmin/TicketmasterView✅ ImplementertDedikert side (implementert i v0.9.0)
/AdminUsersadmin/MembersView✅ Ekvivalent+ super-admin/UsersView

Funksjoner vi har som de ikke har

  1. Korreksjonsforespørselssystem – Medlemmer kan be om endringer i salg
  2. Flere forestillinger per arrangement
  3. Invitasjonslenker – Delbare bli-med-lenker med utløpsdato
  4. Superadmin – Global adminrolle på tvers av organisasjoner
  5. Separat ExternalSale-entitet – Renere datamodell

9. Implementeringsprioritet (oppdatert)

Fase 1: Kritisk (før migrering) — Alt ferdig ✅

#OppgaveInnsatsBeskrivelse
1BestillingsflytFerdigVentende→Godkjent→Levert
2BillettavgifterFerdigfee på TicketType (implementert i v0.9.0)
3Avgift i rapporterFerdigtotalFee vist i alle rapportfaner (implementert i v0.9.0)
4Admin-notaterFerdigadminNote-felt på TicketOrder (implementert i v0.9.0)

Fase 2: Viktig (for funksjonslikeverdighet) — Stort sett ferdig

#OppgaveInnsatsBeskrivelse
5🟡 Telefonnummer~30mLegg til phone på User-entiteten
6Flere rollerFerdigroles[] på OrganizationMembership (implementert i v0.9.0)
7ArkivflaggFerdigarchived boolean på bestillinger (implementert i v0.9.0)
8DatoperiodefilterFerdigLegg til datofiltre i Rapporter (implementert i v0.9.0)
9Alle salg-listeFerdig«Alle salg»-fane i ReportsView (implementert i v0.9.0)

Fase 3: Hyggelig å ha

#OppgaveInnsatsBeskrivelse
10E-postmeldinger~4tE-postkomponist (SVÆRT lav prioritet, utsett)
11Forbedrede rapporterFerdig6-fane rapportsystem (implementert i v0.9.0)
12Rollebasert nav.Ferdig4 seksjoner: Medlem/Billettansv./Kasserer/Admin (implementert i v0.9.0)

Funksjoner vi gjør BEDRE (behold som de er)

  • Flere forestillinger per arrangement (Base44 har ingen)
  • Fleksible billetttyper (ikke hardkodet voksen/barn)
  • Full revisjonslogg på bestillinger (hvem/når for hver statusendring)
  • Separat ExternalSale-entitet (renere enn deres TicketSale)
  • Korreksjonsforespørselssystem (Base44 har ikke dette!)
  • Invitasjonslenker for å bli med i organisasjoner med utløpsdato
  • Superadmin-rolle for organisasjonsadministrasjon på tvers
  • i18n-støtte (Engelsk + Norsk)

10. Migreringssjekkliste

Datamigrering påkrevd

  • [ ] Organisasjoner → Organisasjoner (1:1)
  • [ ] Brukere → Users + OrganizationMembership
  • [ ] Konserter → Events + TicketTypes (del opp prising)
  • [ ] TicketOrders → TicketOrders (transformer struktur)
  • [ ] TicketAllocations → Hopp over (bruk leverte bestillinger)
  • [ ] TicketSales → Registrations + ExternalSales (del etter type)
  • [ ] Messages → Hopp over eller migrer senere

Skjemaendringer (✅ Alle fullført i v0.9.0)

typescript
// 1. ✅ Avgift på TicketType (ferdig)
interface TicketType {
  // ... eksisterende
  fee: number;                  // ✅ IMPLEMENTERT
  ticketmasterPrice?: number;   // ✅ IMPLEMENTERT
  ticketmasterFee?: number;     // ✅ IMPLEMENTERT
}

// 2. Telefon på User (fortsatt ventende)
interface User {
  // ... eksisterende
  phone?: string; // 🟡 IKKE IMPLEMENTERT ENNÅ
}

// 3. ✅ Roller på OrganizationMembership (ferdig)
interface OrganizationMembership {
  // ... eksisterende
  role: "member" | "ticketManager" | "treasurer" | "admin"; // ✅ IMPLEMENTERT (rollehierarki)
  roles?: string[];             // ✅ IMPLEMENTERT
}

// 4. ✅ AdminNote på TicketOrder (ferdig)
interface TicketOrder {
  // ... eksisterende
  adminNote?: string;           // ✅ IMPLEMENTERT
  adminNoteBy?: string;         // ✅ IMPLEMENTERT
  adminNoteAt?: string;         // ✅ IMPLEMENTERT
  archived?: boolean;           // ✅ IMPLEMENTERT
}

11. Foreslåtte neste steg

De fleste opprinnelig identifiserte gap er lukket per v0.9.0. Gjenværende punkter:

  1. Legg til telefonnummer — Eneste gjenværende skjema-gap (🟡 Mindre)
  2. Opprett migreringsskript — Transformer Base44-data til vårt skjema
  3. Intern meldingsutveksling — Hvis nødvendig (foreløpig utsatt)

Oppsummering av gjenværende gap

GapPrioritetInnsats
Telefonnummer på User🟡 Mindre~30m
E-postmeldinger⚪ Utsett~4t
Datamigreringsskript🟡 Middels~8t

Built with VitePress