Pakkesys

Pakkesys' formål

Pakkesys har som formål å hente inn bestillinger på selskap og revy under UKEhelgene. Systemet skal ikke være et fullstendig verktøy for planlegging, men en frontend for standardiserte bestillinger. Det betyr at kundens møte med pakketilbud er via Pakkesys, men at håndtering av spesialtilfeller skjer via epost og i Selskaps regneark.

Hva som skal gjøres av Pakkesys

Hente inn informasjon fra brukere:

Gi informasjon til brukere:

Hva som ikke skal gjøres av Pakkesys, men manuelt av Selskap

Pakkesys skal hente inn bestillinger, men skal ikke være et verktøy for å behandle bestillinger i etterkant. Etter at matbestillinger er mottatt er fortsatt Pakkesys kilden til sannhet over informasjonen systemet allerede lagrer, og ordreendringer må legges inn i Pakkesys av administrator, men Pakkesys behandler ikke denne dataen på noe vis. Årsaken til dette er at behandling av forespørslene fort kan bli komplekst, og det er viktigere at Pakkesys gjør noe enn å forsøke å gjøre alt og deretter feile. Kanskje man senere kan automatisere deler av prosessen, men det gjør vi ikke i første omgang.

Spesielt skal Pakkesys ikke:

Hvordan Pakkesys fungerer

Faser

Pakkesys har et konsept om flere faser gjennom året. UKA er ikke nødvendigvis klar til å hente inn all informasjonen om en pakkebestilling samtidig som gamle mennesker ønsker å gi beskjed om at de skal på festival. Pakkesys har i nåværende versjon et konsept om 4.5 faser.

Fase 0.0: Pakkesys er stengt.

Fase 1.0: Pakkesys tar imot bestillinger som fordeles etter poengsum/jubileum.

Fase 1.5: Pakkesys stenger midlertidig for at UKA skal kunne behandle forespørslene som har kommet.

Fase 2.0: Pakkesys tar imot bestillinger som fordeles etter første-mann-til-mølla.

Fase 3.0: Pakkesys tar ikke imot bestillinger, men UKA er tilgjengelige på epost.

Tekstinnhold

For å unngå at Selskap må sende epost til ITK de vil endre tekstinnhold et sted i Pakkesys, kan de selv endre dette under Tekstinnhold på admin-siden. I utgangspunktet tolkes tekstinnhold som markdown, men et flagg kan sette tekstinnholdet som plaintext. Dette gjør man f.eks. i eposter.

Menyer

Modellering av matbestilling til selskap ganske vanskelig, og vi har endt opp med en modell som tilfredsstiller behovene til UKA-19. Det er sterkt anbefalt å holde seg til denne modellen.

Avhengig av datoen man har valgt for sitt selskap vil man ha en eller flere ulike matretter man kan velge mellom. Til hver av disse matrettene kan man bestille ulike drikkepakker. Det er viktig at man bestiller akkurat like mange drikkepakker tilhørende en matrett som antall man bestiller av den matretten. Det betyr at dersom 10 personer skal ha Meny 1 og 5 skal ha Vegetarmeny, må man bestille 10 drikkepakker under Meny 1 og 5 drikkepakker under Vegetarmeny. Hvis noen ikke ønsker drikke setter man dem på Ingen drikkepakke slik at regnskapet går opp.

Videre er vi interessert i hvilke allergier selskapene har. For lettere å kunne tilrettelegge for allergenfri mat ønsker vi å vite hvilke allergier vi skal ta hensyn til per matrett. Det betyr at hvis to personer i selskapet er allergiske mot gluten, men den ene skal ha Meny 1 og den andre skal ha Vegetarmeny, skriver man "En glutenallergiker" under allergifeltet for Meny 1 og "En glutenallergiker" under allergifeltet for Vegetarmeny.

Dette modelleres i databasen ved at flere MenuCombinationOrder opprettes tilknyttet en Order. Dette representerer en bestilling av count stk av en MenuCombination, som er en kombinasjon av en matrett og en drikkepakke. Det går ikke an å bestille en matrett eller drikkepakke separat fra hverandre.

Revyer og eksport for Regnskap

Før UKA-21 ble det lagt inn støtte for revyer og revybilletter i pakkesys. Dette ble gjort slik at Regnskap kan eksportere alle dataene som trengs for å opprette fakturaer direkte fra pakkesys. På grunn av eksporten til Regnskap er det ekstra viktig at prisene er korrekte. Moms-satsene er satt som environment variabler i base.py og ITK og Regnskap må sjekke at disse stemmer før man starter eksporteringen.

Det er ingen integrasjon mot billig og det er derfor viktig å dobbeltsjekke at dataene i pakkesys stemmer overens med dataene som finnes i billig. Her er det lett å gjøre feil, og det har skjedd tidligere. Det kan for eksempel føre til at man selger flere billetter gjennom pakkesys enn det man har kapasitet til i billig. Dersom det gjøres feil her blir de fort vanskelige å løse og fører ofte til misfornøyde kunder.

Revyer og revybilletter må opprettes av itk og de kan låses på samme måte som menyene.

GDPR

Persondata tilknyttet pakketilbud eksisterer både i Pakkesys og i Selskaps regneark. Pakketilbudsansvarlig er ansvarlig for at alle data slettes etter at UKA er over, og noterer dette i fremdriftsplanen sin. Tømming av Pakkesys gjøres av ITK, mens tømming av regneark gjøres av Selskap. Merk at ITK kan bruke verktøyet python manage.py pakkesys_export for å eksportere en anonymisert versjon av databasen. Deretter kan hele databasen tømmes.

Databasen kan tømmes med verktøyet python manage.py delete_pakkesys_data. Dette verktøyet vil slette all informasjon i pakkesys-databasen med unntak av tekstinnhold (Merk: meny_pdf-er blir ikke lastet opp i databasen og vil fortsatt eksistere i uploads-mappen). NB! Tenk deg om to ganger før du sletter all dataen i databasen.

Hvem som har tilgang til Pakkesys administreres av ITK. Regnearkene adgangsbegrenses ved at man må inviteres for å få både lese- og skrivetilgang. I alle disse arkene skrives det tydelig at man må innom pakketilbudsansvarlig for å få tilgang, og hun gir det bare hvis det sammenfaller med det brukerne har samtykket til i bestillingsskjema, nemlig å være nødvendig for å arrangere pakketilbud. Hvem som har tilgang til regnearkene kan administratorer over regnearket se. Ingen regneark med persondata skal være lesbare for noen som ikke eksplisitt har blitt invitert til å få tilgang.

Brukerhistorier

Bruker

Byggkullet fra 1957 vil på selskap og revy. Kim Larsen får i oppdrag å bestille revy. Han besøker uka.no og trykker seg inn på "Pakketilbud". Der spesifiserer han at de er 26 personer som ønsker både middag og revy lørdag under H-helg. Han kommenterer at en av dem bruker rullestol. Videre har de totalt 108 UKEpoeng, så han skriver inn dette sammen med en forklaring.

Når bestillingen er sendt inn får han en forespørselsbekreftelse. Han forstår at han ikke har fått godkjent forespørselen, men at dette kommer senere. Han kan gå inn på en lenke for å se ordredetaljene.

En måned senere mottar han en epost om at de ikke hadde nok UKEpoeng, så de får ikke datoen de ønsker seg. De kan derimot få fredagen samme helg. Han svarer at dette er greit.

En uke senere mottar han en epost med informasjon om at de nå har booket fredagen under H-helg. Han går på linken som fulgte med og sjekker at ordren er som den skal. Videre besøker han skjemaet for matbestilling som også er lenket til. Etter å ha snakket med resten av kullet sitt skriver han inn at de skal ha 19 supermenyer og 7 vegetarianermenyer. I tillegg er 5 av dem allergiske mot egg. De skal ha 26 vinpakker. Han sender inn skjemaet og får en bekreftelse på at bestillingen er mottatt.

I etterkant finner han ut at 3 av personene ikke kan komme likevel, og det noe er visst allergiske mot fisk. Han sender epost til pakketilbud@uka.no, og de svarer at det ordner seg.

Selskap

I midten av mars åpner fase 1, og Selskap ser på at bestillingene renner inn. Det kommer forespørsler fra alle retninger til pakketilbud@uka.no, og Selskap besvarer disse.

Etter to uker går man over i fase 1.5, og det kommer ikke nye ordre. Selskap eksporterer dataen til et regneark og bruker regnearket til å finne ut hvilke ordre som har prioritet basert på UKEpoeng. Deretter fordeler de datoer, og de setter tidspunkt og sted. Enkelte bestillinger får ikke datoen de ønsker seg, så da kontakter Selskap dem via epost og finner en annen dato. De endrer deretter datoen som er satt i Pakkesys. Etter hvert som bestillingene behandles oppdateres de i Pakkesys. De godkjennes, og administrator velger "Send epost". Da sendes det ut bekreftelser på dato, tid og sted, samt mat-/revybestillingsskjema. Etter hvert begynner matbestillingene å gjennomføres, noe som vises i ordreoversikten.

Når eksisterende ordre er behandlet går man over i fase 2. Da åpnes det for bestillinger igjen, men denne gangen fordeles de etter første-mann-til-mølla. Ellers er prosessen som beskrevet i avsnittet over.

Etter hvert som ordrene blir bekreftet av kundene fordeler Selskap revybilletter i billig og pakkesys. Det er ingen integrasjon mellom disse systemene, så Selskap må føre inn dette i begge systemene. Når revybillettene er fordelt kan Selskap markere alle ordrene som er klare for å eksporteres til Regnskap. Når dette er gjort må ikke ordren endres noe mer ettersom faktura kan allerede ha blitt sendt ut. Dersom man oppdager at det er feil i en ordre som er markert klar for eksport må Selskap og Regnskap kommunisere om hvordan man skal fikse dette.

Når Regnskap har sendt ut faktura og den er blitt betalt sender Selskap ut revybillettene. Dette gjøres manuelt gjennom billig og epost.

I slutten av sommerferien er kapasiteten til Selskap full, og man går over i fase 3. Da kommer det ikke flere forespørsler via Pakkesys, men eksisterende ordre behandles videre. Det viser seg plutselig at statsministeren gjerne vil komme. Da oppretter adminsitrator en ordre for henne via admin-grensesnittet, og prosessen går som vanlig.

Regnskap

Regnskap har et eget admingrensesnitt der med en knapp som eksporterer dataene de trenger til et regneark i Google sheets. Hit eksporteres kun ordre som Selskap har markert klar for eksport. Når det er på tide å sende ut fakturaer logger Regnskap seg inn i pakkesys, eksporterer dataene og overfører disse manuelt til Visma for å sende ut fakturaer.

Pakkesys, HOWTO

Det er en del som må skje på bestemte tidspunkter for å at pakkesys skal gå glatt. Her er et forslag basert på hva som skjedde i UKA-19. Tidspunktene er omtrentelige, men rekkefølgen er viktig.

FaseNårHvaHvemKommentar
0.0JanuarDefinere datoer for faserSelskap, ITK
0.0JanuarDefinere tidsfrister for eventuell utviklingSelskap, ITK
0.0Sen februarGå gjennom alle tekstinnholdsobjekterSelskap, ITK
0.0Sen februarOpprette regneark og koble det til pakkesysSelskap, ITKSe GDPR og Google sheets-eksport
0.0Tidlig marsBytte til fase 1.0ITKget_current_festival().phase
1.0Sen marsBytte til fase 1.5ITK
1.5Sen marsBehandle forespørslerSelskapImporter ordre til gdocs med Google-synkronisering, behandle dem der og oppdater dem i pakkesys via Datofordeling og kommentarer.
1.5Sen marsLage invitasjons-PDFSelskap, GrafikkenSendes til ITK
1.5Sen marsDefinere menySelskap, KSGMå finne ut av navn/pris/allergener for både matretter og drikkepakker. Liste sendes til ITK
1.5Tidlig aprilLage meny-PDFerSelskap, GrafikkenLastes opp under Menyer, én PDF per helgedag
1.5Tidlig aprilLegge invitasjons-PDF på rett stedITK Skal ligge i uno/uploads/Invitasjon_pakketilbud.pdf. Den legges ved hver epost, så sørg for at den er liten! Gjør f.eks. en gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dPDFSETTINGS=/ebook -sOutputFile=small.pdf "Invitasjon_pakketilbud.pdf"
1.5Tidlig aprilOpprette menyerITKOpprett først WeekDays, deretter Foods og så MenuCombinations
1.5Tidlig aprilLåse menyerITKFordi man ikke kan endre pris etter at noen har kjøpt noe. get_current_festival().menus_locked
1.5Tidlig aprilLegge inn revyer og revybilletterITKOpprett først Revue, så RevueTicketGroup
1.5Tidlig aprilLåse revyerITKFordi man ikke kan endre pris etter at noen har kjøpt noe.
1.5Medio aprilSende ut eposterSelskapBruk grensesnittet Epostutsending
1.5Medio aprilBytte til fase 2.0ITK
1.5April-JuniFordele revybilletter så fort ordren er akseptert av kundenSelskapGjøres både i billig og pakkesys
2.0Medio juliBytte til fase 3.0ITK
2.0Juli-SeptemberEksportere data og send ut fakturaerRegnskapBruk grensesnittet Google-eksportering
3.0NovemberEksportere anonymisert data og tømme databaseITKpython manage.py pakkesys_export
3.0NovemberTømme regnearkSelskapSe GDPR

Teknisk

Opprette ny festival

Pakkesys er enn django-app som bor i uno_apps. For å opprette en ny festival må man per nå bruke et python-skall og instansiere et nytt Festival-objekt. Merk at det ikke kan eksistere to Festival-objekter samtidig, så du må eventuelt først slette eksisterende festival. NB: Tenk deg om før du gjør dét.

Fra venv-et ditt:

python manage.py shell
from uno.app.pakkesys.models import Festival
f = Festival(year=<ditt_år_i_heltall>)
f.save()

Google Sheets-eksport

Via biblioteket gspread eksporterer pakkesys all data til et Google-regneark. For å sette opp dette må du hente en oauth-json-fil fra Google Developer Console logget inn som eieren av det aktuelle regnearket. Du må også skru på APIet for Drive og Sheets, og oauth-brukeren må få redigeringstilgang til regnearket.

Ønsker for pakkesys

Bugs og feature-requests fra Selskap salgansvarlig i UKA-21

Bugs

Feature-request

Lenker: Start, gdpr, historie, til nye itkere, uka-no

Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2022-11-03 18:14 | Revisjon: 171 (historie, blame) | Totalt: 1886 kB | Rediger