Bachelorprosjekt 2015 Høgskolen i Oslo og Akershus Et oppfølgings- og dokumentstyringsverktøy for Takst og Prosjektkontroll AS Gruppe 19 Thomas Myklebust Fjørstad Marius Lørstad Solvang Espen Jøstne Hansen Lars-Erik Holte Steffen Sand PROSJEKT NR. 2015 - 19 TILGJENGELIGHET Åpen Studieprogram: Informasjonsteknologi Postadresse: Postboks 4 St. Olavs plass, 0130 Oslo Besøksadresse: Holbergs plass, Oslo Telefon: 22 45 32 00 Telefaks: 22 45 32 05 BACHELORPROSJEKT HOVEDPROSJEKTETS TITTEL DATO Oppfølgings- og dokumentstyringsverktøy for 26.5.2015 Takst og Prosjektkontroll AS ANTALL SIDER / VEDLEGG 185/5 PROSJEKTDELTAKERE INTERN VEILEDER Thomas Myklebust Fjørstad - s181619 Kirsten Ribu Marius Lørstad Solvang - s188882 Espen Jøstne Hansen - s188911 Lars-Erik Holte - s188884 Steffen Sand - s188890 OPPDRAGSGIVER KONTAKTPERSON Takst og Prosjektkontroll AS Ketil Johansen SAMMENDRAG Webapplikasjonen og Android-applikasjonen er utviklet for oppfølging av utbyggingsprosjekter og et verktøy for dokumentstyring. Applikasjonene er utviklet for Takst og Prosjektkontroll AS. 3 STIKKORD Webapplikasjon Android-applikasjon Dokumentstyring HOVEDINNHOLDSFORTEGNELSE Her finnes en oversikt over delrapporter og vedlegg Innledning Kravspesifikasjon Prosessrapport Produktrapport Brukerveiledning Vedlegg o o o o o Vedlegg 1 – Testrapport Vedlegg 2 – Ordliste Vedlegg 3 – Kilder Vedlegg 4 – Tilbakemelding Vedlegg 5 - Kontrakt Side 3 av 185 Innledning INNLEDNING FORORD Dette prosjektet er resultatet av et semesters arbeid på informasjonsteknologistudiet på Høgskolen i Oslo og Akershus. Prosjektet har resultert i en fullverdig Android applikasjon som supplerer en webapplikasjon for takstmann Ketil Johansen og hans firma Takst og Prosjektkontroll AS. Arbeidet har vært spennende og samtlige medlemmer av gruppen har blitt utfordret. Her vil rette en stor takk til alle medvirkende under prosjektets gang. Først og fremst vil vi takke vår eminente oppdragsgiver som har kommet opp med en spennende og utfordrende oppgave til oss. Vi har fått inntrykk av andre grupper at vi har vært veldig heldig som har hatt en såpass interessert og ivrig oppdragsgiver som Ketil Johansen. Ketil har vært veldig god på å gi oss tilbakemeldinger underveis i arbeidsprosessen og har vært en super hjelp for oss. Tor Krattebøl og Torunn Gjester har vært til stor hjelp innenfor sine respektive fagfelt. Tor Krattebøl er faglærer i Webapplikasjoner og Torunn Gjester er faglærer i Applikasjonsutvikling. Samtlige på gruppen hadde begge disse fagene semesteret før det virkelige arbeidet med denne bacheloroppgaven startet. Selv om hverken Tor eller Torunn har vært veilederne våre, har begge to tatt seg tid til å hjelpe oss med vanskelige tekniske spørsmål og vært veldig gode å ha hvis vi har stått fast på et punkt. Vi vil til slutt rette en stor takk til vår veileder ved Høgskolen i Oslo og Akershus, Kirsten Ribu, som har bidratt med sine erfaringer fra veiledning av mange tidligere prosjekter. Hennes innspill til gjennomføring av bacheloroppgaven har vært til stor hjelp. Signert Oslo 26.05.15 Steffen Sand Espen Jøstne Hansen Marius Lørstad Solvang Lars-Erik Holte Thomas Myklebust Fjørstad Side 4 av 185 Innledning INNHOLD Forord ......................................................................................................................................... 4 Innhold ....................................................................................................................................... 5 Presentasjon............................................................................................................................ 6 Om gruppen ......................................................................................................................... 6 Om oppdragsgiver ............................................................................................................... 7 Bakgrunn for oppgaven........................................................................................................... 7 Hvordan vi ble med.............................................................................................................. 8 Testbrukere ............................................................................................................................. 8 Side 5 av 185 Innledning PRESENTASJON Dette dokumentet er ment som en presentasjon av involverte parter og en innledning til oppgaven. Før man leser de andre delrapportene i denne dokumentasjonen er det forventet at man har lest denne innledningen for å få et innblikk og en innføring i oppgaven. Ut gjennom rapporten har vi brukt et gjennomgående teknisk språk og sjargong som har vært nødvendig for å beskrive Android applikasjonen og webapplikasjonen. Se ordlisten(vedlegg 2) hvis det er noe som er uklart eller man lurer på noe. OM GRUPPEN Gruppen består av 5 informasjonsteknologistudenter som har jobbet sammen i forskjellige grupperinger i løpet av disse 3 årene på bachelorstudiet. Vi har vært en sammensveiset gjeng og brukt hverandre i læringen i alle de forskjellige fagene vi har hatt, også utenom gruppearbeider. Figur 1: Organisasjonskart Side 6 av 185 Innledning OM OPPDRAGSGIVER Takst og Prosjektkontroll AS er et selskap som utfører taksering av eiendommer og har autorisasjoner innen verditaksering, boligsalgsrapporter, skader, skjønn, nærings- og landbruks-eiendommer. Ketil Johansen, daglig leder, er utdannet bygningsingeniør, økonom og takstmann gjennom Norges Takseringsforbund. Han har 30 års erfaring med utbyggingsprosjekter på Nesodden. Dette har resultert i 75 boliger og 1 næringsbygg. Firmaet er nå i gang med et nytt prosjekt med 4 eneboliger og planlegger et større prosjekt på Nesoddtangen sentrum med 2 byggetrinn. Takst og Prosjektkontroll AS kan heretter bli referert til som “oppdragsgiver” videre i denne dokumentasjonen. BAKGRUNN FOR OPPGAVEN Primærformålet med oppgaven var å lage en nettløsning for å lette hverdagen og få bukt med den store papirmøllen det ble ved alt av rapporter, kontrakter og alt annet av papirer som er knyttet til utbyggingsprosjekter. Det som tidligere var den eksisterende hjemmesiden til oppdragsgiver var i all hovedsak en informasjonsside for et gammelt prosjekt. Løsningen kommer først og fremst til å bli brukt av Ketil Johansen, ene og alene fordi han per dags dato er Takst og Prosjektkontroll AS. Uavhengig av dette er det lagt opp for å tilegne brukere forskjellige rettigheter enten det skulle vært en ny kollega eller ha en portal mellom kunder og oppdragsgiver på et byggeprosjekt. Android-applikasjonen er ment som et verktøy for blant annet rapportering og møtereferater. Dette er en applikasjon som i første omgang er ment for Ketil Johansen og for bruk ute av kontoret. De største fordelene det nye systemet og tilhørende Androidapplikasjon tilfører er: Minimerer papirbruken til det absolutte minimum Samler alt av informasjon for et prosjekt på et sted Enkelt å lage en rapport på «farten» med Android-applikasjon Et profesjonelt og moderne bilde av bedriften utad Digitalisering av hverdagen Sikker innlogging sikrer informasjon som er klassifisert Side 7 av 185 Innledning HVORDAN VI BLE MED Så fort vi ble enige om å være en bachelorgruppe, høsten 2014, satte vi oss ned og diskuterte hva slags type oppgave vi ville jobbe med det neste semesteret. Når vi ble enige og hadde fått snevret ned fagområdene vi helst ville jobbe med, sonderte vi terrenget med oppgaver skolen hadde lagt ut. Dette var mange forskjellige typer oppgaver og vi sendte ut mail med søknader på de av dem som var innen for de løserammene vi hadde satt i gruppen. Før vi rakk å få svar på noen av disse søknadene datt det en perfekt oppgave omtrent i fanget på oss. Alle gruppemedlemmene hadde tatt en runde blant familie og bekjente som vi kunne tenke oss kanskje hadde en ide til bacheloroppgave. Vi fikk veldig rask respons fra Ketil Johansen, stefaren til gruppemedlem Steffen Sand. Fra denne første mailen hvor Ketil beskrev ideen sin og hva han kunne ønske seg, sa vi ja øyeblikkelig. Fram til det første møtet med Ketil hadde vi fått frie tøyler til å komme med et par forskjellige forslag og utkast til oppgaveutforminger. Etter det første møtet var samtlige i gruppen og Ketil veldig fornøyde med den oppgaven vi hadde utformet sammen. TESTBRUKERE Det er satt opp en vanlig test bruker og en administrator bruker som kan brukes til å logge seg inn i webapplikasjonen. Her kan det testes forskjellig funksjonalitet, navigering og løsninger på forskjellige ting. Vi anbefaler å bruke Google Chrome som nettleser. Webløsningen finner man på: http://takstno.azurewebsites.net/ Vanlig bruker Brukernavn: [email protected] Passord: ***** Administrator bruker Brukernavn: [email protected] Passord: ***** Side 8 av 185 Side 9 av 185 Kravspesifikasjon KRAVSPESIFIKASJON FORORD Kravspesifikasjonen er laget for at både utviklere og oppdragsgiver vil få en forståelse av rammeverket og funksjonaliteten til produktene. Kravspesifikasjonen vil også fungere som en avtale, slik at produktet blir som begge parter er enige om. Eventuelle endringer av kravspesifikasjonen krever et møte med begge parter til stede, hvor det blir enighet. Kravspesifikasjonen vil være som en retningslinje for utviklerne underveis i produktutviklingen, slik at utviklerne holder seg til de rammene som er definert for prosjektet. Side 10 av 185 Kravspesifikasjon INNHOLD Forord ....................................................................................................................................... 10 Innhold ..................................................................................................................................... 11 Innledning ................................................................................................................................. 12 Bakgrunn for oppgaven ............................................................................................................ 12 Krav til funksjonalitet ............................................................................................................... 13 Kundens krav til funksjonalitet ............................................................................................. 13 Mål for funksjonalitet gjort i forprosjektrapport .................................................................. 13 Oppdragsgivers krav til funksjonalitet på webapplikasjon ................................................... 13 oppdragsgivers krav til funksjonalitet på Android-applikasjon ............................................ 13 Prosjekter........................................................................................................................... 14 Rapporter ........................................................................................................................... 14 Brukere .............................................................................................................................. 14 Brukere (Administrering) ................................................................................................... 15 Filer .................................................................................................................................... 15 Nettsted ............................................................................................................................. 15 Applikasjon ........................................................................................................................ 15 Tilleggs funksjonalitet ........................................................................................................... 16 Rapporter ........................................................................................................................... 16 Nettside ............................................................................................................................. 16 Prosjekt .............................................................................................................................. 16 Tekniske krav ............................................................................................................................ 16 Krav til koden............................................................................................................................ 17 Sikkerhetskrav .......................................................................................................................... 17 Designkrav ................................................................................................................................ 18 Konklusjon ................................................................................................................................ 18 Side 11 av 185 Kravspesifikasjon INNLEDNING Denne bacheloroppgaven i informasjonsteknologi ved Høgskolen i Oslo og Akershus er gitt av firmaet Takst og Prosjektkontroll AS. Oppgaven går ut på å utvikle et oppfølgnings- og dokumentstyringsverktøy for prosjekter under dette firmaet. Verktøyet skal ligge på en nettside og skal ha en mobil-applikasjon som skal snakke med samme database som nettstedet. Applikasjonen skal fungere på Android-telefoner og være nyttig for daglig leder når han ikke har tilgang til en datamaskin. Styringsdokumentene bestod blant annet av hvilken funksjonalitet oppdragsgiver ønsket. Oppdragsgiver har ingen bakgrunn fra programmering eller generell utforming av nettsider. Dette ga oss som utviklere mulighet til å komme med forskjellige forslag om oppbygning og struktur. På denne måten fikk oppdragsgiver flere gode alternativer for framstilling av ønsket funksjonalitet. Design er blitt jobbet på etterhvert som funksjonaliteten til nettstedet har kommet på plass, og har undergått flere modifikasjoner underveis etter ønske av oppdragsgiver. Til tross for disse små endringene har implementering av funksjonalitet vært høyere prioritert enn design, da oppdragsgiver hadde ønske om et simpelt design uten mye sterk og forskjellig fargebruk. BAKGRUNN FOR OPPGAVEN Oppdragsgiver arbeider gjerne med flere utbyggingsprosjekter samtidig. Dette innebærer å bygge boliger, følge med at alt går etter planen og orientere involverte aktører som for eksempel snekkere, rørleggere og elektrikere. Ettersom dette blir gjort av kun en person og alle filene tidligere har blitt lagret på en datamaskin, har dette over ført til enorme mengder filer og rot på datamaskinen. Av denne grunn var ønsket til oppdragsgiver å kunne laste opp filer til ett nettsted og kunne sortere disse filene på de forskjellige prosjektene. Det var også et ønske å kunne beholde filer til prosjekter var fullført, slik at oppdragsgiver kunne gå tilbake til disse. Ettersom det er boliger som skal selges og aktører som skal orienteres, er det også lagt til funksjonalitet som gjør det mulig for administrator å opprette og dele ut brukerkontoer slik at diverse aktører har mulighet til å logge inn på nettstedet og se filer som er relevante for dem. Side 12 av 185 Kravspesifikasjon KRAV TIL FUNKSJONALITET KUNDENS KRAV TIL FUNKSJONALITET Kravet fra oppdragsgiver er å ha et verktøy der alt av filer og informasjon skal kunne legges ut på nettstedet, slik at han ikke trenger å arbeide med papir og heller ha alt på en server. Samtidig skal det være tilgjengelig for andre brukere. MÅL FOR FUNKSJONALITET GJORT I FORPROSJEKTRAPPORT Nettsiden skal være et enkelt verktøy for deling av filer mellom gitte brukergrupper og administrator Nettstedet skal være et rapporteringsprogram for deltagerne i et utbyggingsprosjekt Mobilapplikasjonen skal være et enklere og kjappere verktøy for å rapportere til nettstedet når en datamaskin ikke er innen rekkevidde Nettstedet skal markedsføre bedriften og dens prosjekter Nettsiden skal være et kommunikasjonsverktøy for deltagerne i bedriftens prosjekter Nettstedet skal arkivere tidligere prosjekter OPPDRAGSGIVERS KRAV TIL FUNKSJONALITET PÅ WEBAPPLIKASJON Innlogging av enten bruker eller administrator med passord med forskjellig tilgang og muligheter OPPDRAGSGIVERS KRAV TIL FUNKSJONALITET PÅ ANDROID-APPLIKASJON Ta bilder og legge rett inn i ønsket rapport eller skjema Side 13 av 185 Kravspesifikasjon PROSJEKTER Opprette prosjekter Liste ut alle pågående prosjekter Liste ut alle prosjekter som er fullførte Endre prosjektinformasjon Laste opp filer til prosjekter, som lagres på server og kan lastes ned Gi rettigheter til brukere eller brukergrupper for prosjekter og filer Slette rapporter Forhåndsbestemte brukergrupper til alle prosjekter Endring av brukergrupper Sletting av brukergrupper RAPPORTER Opprette rapportert som er knyttet til et prosjekt Liste ut alle rapporter på et prosjekt Vise en rapport med eventuelt bilde Legge til bilder på rapporter Endre rapporter Slette rapporter BRUKERE Se filer innad prosjekter du er knyttet til Laste opp filer til din personlige mappe Side 14 av 185 Kravspesifikasjon BRUKERE (ADMINISTRERING) Opprette brukere Liste ut alle brukere Endre brukere Slette brukere Se alt av informasjon til brukeren og filer de har lastet opp Legge bruker i et prosjekts brukergruppe FILER Mulighet for opplastning av pdf, excel, doc, jpg, png og liknende dokumentasjonsfiler Liste ut alle filer Mulighet for nedlastning NETTSTED Endre forside med tekst og bilder (CMS) Endre informasjonsside med tekst, bilder og kontaktinformasjon (CMS) Kontrollpanel for administrator Min side for brukere APPLIKASJON Opprette rapporter på prosjekter Ta bilde og legge til på rapporten Liste ut rapporter Vise enkelte rapporter Endre rapporter Side 15 av 185 Kravspesifikasjon TILLEGGSFUNKSJONALITET Tilleggsfunksjonalitet er noe som enten oppdragsgiver eller vi har tenkt på som kan forbedre verktøyet. RAPPORTER Opprettelsesskjemaet til rapporter skal se likt ut som papirutgaven NETTSIDE Logging av databaseendringer Liste ut databaselogg Forside med bildekarusell PROSJEKT Opprette egendefinerte brukergrupper TEKNISKE KRAV Vi har ikke hatt noen tekniske krav fra oppdragsgiver ettersom han ikke vet hvilket kodespråk eller utviklingsverktøy som ville være bra for oppgaven. Dette har vært en tilleggsoppgave for oss å finne ut hvordan vi kunne utvikle det oppdragsgiver ønsket på en best mulig måte. Så dette avsnittet blir de tekniske kravene som vi har satt for nettstedet og applikasjonen. Side 16 av 185 Kravspesifikasjon Nettstedet skal utvikles i .NET med MVC-oppsett i utviklingsverktøyet Visual Studio Nettstedet skal kodes i hovedsakelig C# og JavaScript Nettstedet skal bruke rammeverket Entity Framework Passord skal hashes Filene på nettstedet må linkes mellom mapper og brukere, slik at det ikke blir dobbeltlagring av filer Android-applikasjonen skal utvikles i Eclipse Android-applikasjonen skal kodes i Java og XML KRAV TIL KODEN I starten av utviklingsprosessen ble vi enige om at alt av kode skal skrives på engelsk, noe som gjør at nettsiden blir enklere å oppdatere for eventuelle videreutviklere. Ettersom oppdragsgiver ikke kan kode selv, er det sannsynlig at han kommer til å få noen andre til å vedlikeholde nettsiden, ved feil eller endringer. Navn på klasser, metoder og variable skal ha gode og konsistente navn slik at utenforstående programmerere enkelt kan sette seg inn i koden Oppsettet til alle kontrollere skal inneholde de samme navnene med små justeringer for lett gjenkjennelighet. public bool deleteProject(int id) public bool deleteUsergroup(int id) SIKKERHETSKRAV Her følger en liste med sikkerhetskrav som er satt av oppdragsgiver og utviklere. Brukere skal kun opprettes av administrator Passord skal krypteres med SHA512 Filer skal ikke kunne sees av andre enn de som er innlogget med definerte rettigheter Kun administrator har tilgang til administrasjonspanelet Endring av brukerinformasjon er kun mulig for administrator Side 17 av 185 Kravspesifikasjon DESIGNKRAV Oppdragsgiver hadde ikke mange ønsker om hvordan nettstedet skulle se ut, så utseende på nettstedet har vært ikke vært prioritert i oppgaven vår. Han ville ha et nettsted som var så enkelt som mulig, og det var viktigere med funksjonalitet enn design. Hvordan det har blitt seende ut har blitt bestemt ved at vi (utviklerne) har kommet med forslag til oppdragsgiver og fått dette godkjent. Vi gikk til oppdragsgiver med spørsmål om vi skulle lage en mulighet for han å endre noe på forsiden, slik at han kunne markedsføre prosjektene sine. Denne idéen likte han og vi lagde da en CMS for han. Nettstedet skal være enkelt å bruke Nettstedets sider skal være gjenkjennbare og konsistent satt opp Lik fargebruk overalt Rapporter skal være så like papirutgavene som mulig. Både ved utfylling og i utskriftsformat Mulighet for å endre tekst og bilde på forside og informasjonssiden KONKLUSJON Kravspesifikasjonen har blitt bygd opp i henhold til hvordan vi som utviklere tolket oppdragsgivers idé om utviklingen. Ettersom oppdragsgiver ikke hadde særlig stor kunnskap om programmering og nettsider, ble det vår oppgave å få hans idé til virkelighet på måten vi synes var best. Kravspesifikasjonen ble laget ut i fra de forskjellige møtene vi hadde sammen med oppdragsgiver, der vi viste forskjellige utgaver av nettstedet og fikk tilbakemelding om det var slik han ønsket det. Android-applikasjonen var ikke et direkte ønske fra oppdragsgiver, men derimot var det vi som kom med forslaget og fortalte at han kunne ha mulighet til å utføre noen av funksjonene via denne applikasjonen enklere. Dette verktøyet skal brukes som et "on-thego" verktøy, for eksempel rapporter som skal fylles ut kan bli gjort på byggeplassen og han har muligheten til å ta bilder av det som rapporteres og laste det raskt opp til samme server som nettstedet bruker. Side 18 av 185 Kravspesifikasjon Utviklingen av oppgaven har vært veldig tidskrevende, ettersom oppdragsgiver kun hadde en formening om hva han ønsket å kunne gjøre på nettstedet. Det ble da vår oppgave å finne en måte å gjøre dette med vår kunnskap. Tilbakemeldingen vi har fått fra oppdragsgiver og hans tilknytninger har vært veldig bra, og han har blitt overrasket over hvor mye vi fikk til av det han ønsket. Vi har utfylt alle de kravene oppdragsgiver ønsket å ha med, og i tillegg har vi lagt til flere funksjoner han ikke hadde tenkt på, som for eksempel endring av informasjon på noen av nettsidene. Etter at nettstedet er blitt lastet opp har oppdragsgiver allerede startet å bruke det i sine prosjekter, og er godt fornøyd med applikasjonene. Side 19 av 185 Side 20 av 185 Prosessdokumentasjon PROSESSDOKUMENTASJON FORORD I denne rapporten greier vi ut om hele prosessen som til slutt kulminerte i et nettbasert oppfølgingsverktøy for oppdragsgiver. Av nødvendige forkunnskaper anbefaler vi leseren å gjøre seg kjent med innledningsdokumentet for å skaffe seg et helhetlig inntrykk av prosjektet. For å unngå eventuelle misforståelser med hensyn til terminologi refererer vi til ordlisten i vedlegg 2. Prosessrapporten forklarer hvordan vi har jobbet og hvilken utviklingsmetode vi har valgt å bruke. Den er delt inn i 4 kapitler: Planlegging og metode: En gjennomgang av planleggingen og hvilke arbeidsmetoder, teknikker og verktøy som ble brukt i prosjektperioden. Utviklingsprosessen: En beskrivelse av hele utviklingsprosessen. Fra startfasen og konseptutviklingen til ferdigstillingen av produktet. Kravspesifikasjonen og dens rolle: Hvordan kravene til produktet påvirket oss under utviklingen. Avsluttende del: Våre tanker og meninger om hovedprosjektet, lærerutbyttet og det ferdige produktet. Side 21 av 185 Prosessdokumentasjon INNHOLD Forord.................................................................................................................................................................... 21 Innhold .................................................................................................................................................................. 22 Planlegging og metode .......................................................................................................................................... 25 Tiden før prosjektstart ...................................................................................................................................... 25 Ansvarsfordeling ............................................................................................................................................... 25 Webapplikasjon ............................................................................................................................................. 25 Android-applikasjon ...................................................................................................................................... 26 Metodikk og arbeidsteknikker .......................................................................................................................... 26 Smidig metodikk ............................................................................................................................................ 26 Scrum ............................................................................................................................................................ 26 Daglige og ukentlige Scrum-rutiner............................................................................................................... 27 Kommunikasjon med oppdragsgiver og veileder .......................................................................................... 28 Styringsdokumentene ....................................................................................................................................... 29 Statusrapport ................................................................................................................................................ 29 Prosjektskisse ................................................................................................................................................ 30 Forprosjekt .................................................................................................................................................... 30 Arbeidsforhold .................................................................................................................................................. 31 Pilestredet 35, 0166 Oslo (P35) ..................................................................................................................... 31 Pilestredet 32, 0166 Oslo (P32) ..................................................................................................................... 32 Verktøy .............................................................................................................................................................. 32 Språk ............................................................................................................................................................. 32 C# .............................................................................................................................................................. 32 HTML (HyperText Markup Language) ....................................................................................................... 32 CSS (Cascading StyleSheet) ....................................................................................................................... 32 JavaScript .................................................................................................................................................. 33 PHP (Hypertext Preprocessor) .................................................................................................................. 33 Java ............................................................................................................................................................ 33 Utvikling ........................................................................................................................................................ 33 Side 22 av 185 Prosessdokumentasjon Visual Studio 2013 ..................................................................................................................................... 33 Eclipse 4.2 Juno ......................................................................................................................................... 34 Java Development Kit (JDK) ....................................................................................................................... 34 Android SDK .............................................................................................................................................. 34 Logcat ........................................................................................................................................................ 34 Android debug bridge (ADB) ..................................................................................................................... 34 Dalvik Debug Monitor Server (DDMS) ....................................................................................................... 35 Adobe Photoshop ...................................................................................................................................... 35 Utvidelser og rammeverk .............................................................................................................................. 35 Entity Framework ...................................................................................................................................... 35 Bootstrap ................................................................................................................................................... 35 jQuery ........................................................................................................................................................ 35 JSON (JavaScript Object Notation) ............................................................................................................ 36 StudioDonder TestHelper .......................................................................................................................... 36 Toastr ........................................................................................................................................................ 36 Versjonskontroll ............................................................................................................................................ 36 Team Explorer/Team Foundation Server (TFS) ......................................................................................... 36 Dropbox..................................................................................................................................................... 36 Dokumentasjon ............................................................................................................................................. 37 Microsoft Word ......................................................................................................................................... 37 yEd ............................................................................................................................................................. 37 Utviklingsprosessen .............................................................................................................................................. 37 Konseptutvikling ................................................................................................................................................ 37 Risikoplan ...................................................................................................................................................... 37 Kortvarig sykdom/fravær .......................................................................................................................... 38 Langvarig sykdom/fravær ......................................................................................................................... 38 Tidsklemme ............................................................................................................................................... 38 Tap av data ................................................................................................................................................ 38 Konflikter i gruppa ..................................................................................................................................... 39 Side 23 av 185 Prosessdokumentasjon Datainnsamling ............................................................................................................................................. 39 Målgruppe og behov ..................................................................................................................................... 39 Gruppemøter og brainstorming .................................................................................................................... 40 Testing av Androidapplikasjon .......................................................................................................................... 40 Testing av webapplikasjon ................................................................................................................................ 40 Faglige utfordringer........................................................................................................................................... 40 Design av webapplikasjonen ......................................................................................................................... 40 Android – PHP – Webserver .......................................................................................................................... 41 Avansert database......................................................................................................................................... 41 Mangelfull enhetstesting .............................................................................................................................. 41 Personvern og konfidensialitet ......................................................................................................................... 42 Dokumentasjonsfasen ....................................................................................................................................... 42 Kravspesifikasjonen og dens rolle ......................................................................................................................... 43 Avsluttende del ..................................................................................................................................................... 43 Ord fra oppdragsgiver ....................................................................................................................................... 43 Samarbeid i gruppen ......................................................................................................................................... 43 Veiledning ved HiOA ......................................................................................................................................... 44 Læringsutbytte .................................................................................................................................................. 44 Det ferdige produktet ....................................................................................................................................... 45 Nytteverdi ..................................................................................................................................................... 45 Videreutvikling .............................................................................................................................................. 46 Webapplikasjon ......................................................................................................................................... 46 Android-applikasjon .................................................................................................................................. 47 Konklusjon ......................................................................................................................................................... 47 Side 24 av 185 Prosessdokumentasjon PLANLEGGING OG METODE Planlegging er en viktig del i all slags arbeid. Tidlig i prosjektet planla vi å dele oss i to grupper, fordelt på applikasjonene vi skulle lage. I denne delen av prosessrapporten vil vi gå gjennom og beskrive arbeidsmetoder, teknikker, verktøy og hjelpemidler som er felles for hele gruppa og som har blitt benyttet i hele prosjektperioden. TIDEN FØR PROSJEKTSTART Gruppen vår ble stiftet medio oktober 2014. Under vårt første gruppemøte skulle vi diskutere og kartlegge hva slags type hovedprosjekt vi ønsket å jobbe med. Alle gruppemedlemmene kjente hverandre fra før, noe som ga et godt grunnlag for å kunne avgjøre hvilken type hovedprosjekt vi ønsket å arbeide med. Vi lagde en liste med områder vi foretrakk å arbeide med i tillegg til å vurdere mulige oppdragsgivere. Blant aktuelle oppdragsgivere var vi innom prosjektforslagene til HiOA og andre bedrifters. Vi kontaktet bedriftene vi syntes var mest aktuelle og appellerende. Responsen fra bedriftene var begrenset, men innen kort tid kom vi i kontakt med bygningsingeniør, økonom, takstmann og daglig leder i Takst og Prosjektkontroll AS Ketil Johansen som vi syntes tilbød den mest spennende oppgaven. Etter en telefonsamtale med utveksling av idéer og mål falt valget på denne. ANSVARSFORDELING Prosjektet vårt bestod av to applikasjoner. Ut ifra ønsker og ferdigheter fordelte vi oss slik: WEBAPPLIKASJON Lars-Erik Holte Marius Lørstad Solvang Steffen Sand Side 25 av 185 Prosessdokumentasjon ANDROID-APPLIKASJON Espen Jøstne Hansen Thomas Myklebust Fjørstad METODIKK OG ARBEIDSTEKNIKKER SMIDIG METODIKK Smidig metodikk er en utviklingsmetode som ofte brukes i prosjekter hvor det kan oppstå usikkerheter vedrørende tidsbruk og omfang. Oppdragsgiver var ikke sikker på hvordan han ønsket at vi skulle løse problemstillingen hans. Løsningens innhold var ikke fastlagt. Med stadig skiftende rammebetingelser var vi nødt til å jobbe smidig og fleksibelt. Endrings- og tilpasningsdyktighet var viktig og gruppen valgte derfor Scrum som smidig metodikk. SCRUM Scrum er en utviklingsmetode som ofte brukes i utviklingen av avanserte informasjonssystemer. Metoden er basert på empirisk prosesskontroll, og oppfordrer til iterativ og inkrementell utvikling i form av sprinter. Sprintene varer i 1-4 uker. Hver sprint bidrar til små produktinkrementer, og inneholder en rekke funksjoner som skal implementeres i produktet. Denne listen med funksjoner kalles sprintbacklogg. Denne listen blir i rekkefølge utført, testet og avsluttet. Når en funksjon har blitt ferdigtestet og avsluttet, begynner man på neste funksjon. Beregnet tidsforbruk på hele sprintbackloggen er grov estimert, og dermed vil sprintene ha varierende tidsomfang. Hele samlingen av funksjoner som skal implementeres og til sammen utgjøre hele produktet, kalles produktbacklogg/produkt kø. Side 26 av 185 Prosessdokumentasjon DAGLIGE OG UKENTLIGE SCRUM-RUTINER Før oppstart av en sprint lagde vi en sprintbacklogg med funksjoner som vi ønsket å fullføre. Funksjonene som skulle implementeres ble ofte utformet som user stories. Slik så noen av våre user stories ut: Som en… ønsker jeg å kunne… Administrator legge til brukere i databasen Administrator legge til bruker til prosjektet Administrator legge til bilder i skaderapportene bruker få filrettigheter fra administrator slik at… jeg kan starte å involvere andre parter i prosjektene. jeg kan begynne å tildele filrettigheter til de forskjellige brukerene. jeg kan få en visuell forståelse av hvor stort omfang skaden har. jeg kan få tilgang til de filene som angår meg i prosjektene jeg er involvert i. Denne sprint backloggen utgjorde hele «to-do-listen» for hver enkelt sprint. For å ha oversikt og kontroll over denne listen benyttet vi oss av en scrum-tavle på nettet. Scrumtavlen ble fortløpende oppdatert. Figur 2: Scrum-tavle fra http://scrumblr.ca/. Side 27 av 185 Prosessdokumentasjon Under produksjonen av mer omfattende funksjoner benyttet vi oss av «pair programming». To hoder kan ofte fungere bedre enn ett. Ved mer kompliserte problemstillinger var det fordelaktig å være flere som diskuterte og kom med innspill. Denne typen programmering er hentet fra den smidige prosessmodellen Extreme Programming (XP). Når en funksjon var i testfasen, testet vi den internt i gruppen først. Når vi hadde ferdigtestet en gruppe funksjoner, publiserte vi nettsiden på skolens server. På den måten ble det mulig for oppdragsgiver å teste funksjonene og komme med eventuelle tilbakemeldinger. Når oppdragsgiver sa seg fornøyd med funksjonen, ble den lagt til i kolonnen for ferdige funksjoner. Flere ganger i uken startet vi dagen med et kort møte hvor hvert gruppemedlem fortalte kort og presist hva som har blitt gjort siden forrige møte, samt hva dagens arbeidsoppgaver er. Hensikten med slike møter er å få oversikt over hva som har blitt gjort, og hva som må gjøres for å kunne avslutte en sprint og opprettholde progresjonen i prosjektet. Vi førte dagbok under hele prosjektperioden. Dagboken blir beskrevet nærmere i kapittelet om styringsdokumentene. KOMMUNIKASJON MED OPPDRAGSGIVER OG VEILEDER Vi har gjennom hele prosjektperioden hatt jevnlig kontakt med oppdragsgiver. Vi har først og fremst kommunisert over telefon eller mail. De gangene vi følte det var nødvendig med en lengre samtale, avtalte vi et møte. Disse møtene fant sted på Aker Brygge eller i HiOAs lokaler. Fysiske møter var nødvendig de gangene vi hadde gjort store endringer eller hadde viktige spørsmål. Møtene var også svært viktige for å få tilbakemeldinger på mobilapplikasjonen. Disse møtene fikk vi svært mye ut av, og kunne ikke vært foruten. Med unntak av de fysiske møtene, gikk mye av kommunikasjonen som sagt over telefon eller mail. Vi har publisert nye versjoner av produktet og bedt om tilbakemeldinger fra oppdragsgiver. Vi har gjennom hele prosjektperioden fått raske tilbakemeldinger, og oppdragsgiver har alltid vært lett tilgjengelig. Den korte responstiden gjorde at vi hadde god flyt i sprintene, og sjeldent gikk ut over beregnet tid. Kontakten med vår veileder Kirsten Ribu har variert ut ifra vårt behov. I startfasen av prosjektet ble vi enige med Kirsten om at vi skulle henvende oss til henne hvis vi trengte noe fremfor å ha faste møter. Hun har hatt mye å gjøre i prosjektperioden, og vi så ikke Side 28 av 185 Prosessdokumentasjon nytteverdien i å ha ukentlige møter. Tidlig i prosjektperioden benyttet vi oss flere ganger av HiOAs iLab, som er et rom med flere maskiner og annet utstyr som kunne bli aktuelt å bruke. For å booke dette rommet måtte vi gå gjennom Kirsten. STYRINGSDOKUMENTENE Både før og underveis i prosjektperioden var det noen rapporter og skisser vi var nødt til å publisere på gruppens nettside. Huskelisten med frister så slik ut: Nr Oppgave Hvor Frist 1 2 3 Statusrapport Prosjektskisse Forprosjekt På nettet På nettet På nettet 24.10.2014 5.12.2014 23.1.2015 STATUSRAPPORT Statusrapporten var den første rapporten vi produserte sammen som en bachelorgruppe. Denne rapporten skulle beskrive arbeidet vårt med å finne et hovedprosjekt. Den skulle blant annet inneholde disse punktene: Navn på gruppemedlemmene. En beskrivelse av hva vi hadde gjort til da for å få tak i et prosjekt. Beskrive hvilke prosjekttyper som var aktuelle og hvilken type oppdragsgiver vi kunne tenke oss. I denne perioden begynte vi også å føre dagbok. Vi startet med å skrive i dagboken etter hvert møte vi hadde, men vi modererte oss etter hvert. Vi hadde såpass mange møter at det hadde resultert i mange entries med lite innhold. Dagboken ble da oppdatert ukentlig, direkte på gruppens nettside. Side 29 av 185 Prosessdokumentasjon Figur 3: Dagbok fra gruppens hjemmeside PROSJEKTSKISSE Dette dokumentet skulle skissere og presisere hva slags prosjekt vi hadde valgt å jobbe med. Vi utformet en prosjektbeskrivelse og en kort beskrivelse av oppdragsgiver. Videre skulle vi redegjøre for mulige krav til maskinplattform, dataverktøy og andre rammebetingelser. Kontaktinformasjonen til oppdragsgiver og kontaktpersonen i bedriften skulle også oppgis i denne skissen. I tillegg måtte vi gi hovedprosjektet en foreløpig tittel. FORPROSJEKT Dette dokumentet ble påbegynt så snart prosjektet ble godkjent som bachelorprosjekt og vi hadde fått tildelt en intern veileder. I forprosjektet skulle problemområdet defineres ytterligere og skildres så presist som mulig. Her skulle det også avgjøres om prosjektet lot seg gjennomføre og ferdigstilles innenfor de gitte tidsrammene, eller om det måtte bli avgrenset. Vi måtte avgjøre rammebetingelser som maskinplattform og utviklingsmiljø vi skulle benytte oss av. I tillegg utarbeidet vi en risiko plan og en grov estimert fremdriftsplan for resten av prosjektet. Side 30 av 185 Prosessdokumentasjon Figur 4: Fremdriftsplan ARBEIDSFORHOLD PILESTREDET 35, 0166 OSLO (P35) I all hovedsak har vi arbeidet i HiOAs lokaler i Pilestredet 35. Fakultet for teknologi, kunst og design og fakultet for samfunnsfag har base her. Det gjorde at vi raskt kunne komme i kontakt med veilederen vår og tidligere forelesere. P35 har store og flotte lesesaler, tilgang til stasjonære datamaskiner, bibliotek og utallige grupperom med nødvendig utsyr. Det er også en stor kantine som serverer varm mat hele dagen. For å sikre oss tilgang til et av grupperommene brukte vi HiOAs reservasjonsverktøy WebUntis. Dette verktøyet lar studenter velge tidsperiode og utvalgskriterier for den romtypen man ønsker å reservere. Begrensningen er fem reservasjoner per student. Stort sett trengte vi ikke noen Figur 5: Lokalene i P35 spesielle ressurstyper som projektor, overhead o.l. Enkelte ganger hadde vi ikke reservert rom, eller trengte et grupperom med en ressurs som ikke var tilgjengelig i P35. Da benyttet vi oss av P32. Side 31 av 185 Prosessdokumentasjon PILESTREDET 32, 0166 OSLO (P32) P32 ligger et steinkast unna P35. De gangene vi ikke hadde tilgang på tilstrekkelige fasiliteter i P35, benyttet vi oss av P32. Fakultetet for helsefag holder til her. Lokalene eies også av Høgskolen i Oslo og Aershus, og man kan bruke WebUntis til å reservere rom. Fasilitetene er like gode her. VERKTØY SPRÅK C# C# er et objekt orientert programmeringsspråk utviklet av Microsoft og tilhører .NETplattformen. HTML (HYPERTEXT MARKUP LANGUAGE) HTML er det standardiserte markeringsspråket for formatering av nettsider med informasjon som skal vises i en nettleser. CSS (CASCADING STYLESHEET) CSS er et språk som brukes til å definere utseende på filer skrevet i HTML. Side 32 av 185 Prosessdokumentasjon JAVASCRIPT JavaScript er et programmeringsspråk som benyttes for å gjøre nettsider interaktive og dynamiske. PHP (HYPERTEXT PREPROCESSOR) PHP har flere bruksområder, blant annet har det ofte blitt brukt i utviklingen av dynamiske nettsider. En annen nyttig funksjon ved PHP er muligheten til å behandle informasjon på tjener og sende det til klient. PHP har støtte for mange forskjellige databasesystemer og mulighet til å jobbe med filer, datautvekslingsformater som for eksempel JSON, samt behandle tekst, PDF og liknende dokumenter. JAVA Java er et objekt orientert programmeringsspråk. Mobile applikasjoner til Android er en type program som man kan utvikle med dette språket. UTVIKLING VISUAL STUDIO 2013 Visual Studio er et IDE fra Microsoft. Visual Studio blir brukt til å utvikle nettsider, webapplikasjoner og web servicer. Side 33 av 185 Prosessdokumentasjon ECLIPSE 4.2 JUNO Eclipse er en fullverdig Java IDE som har alt som skal til for å utvikle fullverdige Java applikasjoner med unntak av Java JDK. JAVA DEVELOPMENT KIT (JDK) JDK er en programvareutviklingspakke for å utvikle, kompilere, debugge og overvåke Javaapplikasjoner. ANDROID SDK Android SDK er en programvareutviklingspakke som gjør det mulig å utvikle Androidapplikasjoner. Android SDK inneholder flere nyttige verktøy og en emulator. LOGCAT LogCat følger med Android SDK, og gjør det mulig å debugge/feil søke i Androidapplikasjoner. ANDROID DEBUG BRIDGE (ADB) ADB Følger med Android SDK. Dette er et verktøy som gjør det mulig å få Eclipse til å kommunisere med emulatoren eller en tilkoblet enhet. Side 34 av 185 Prosessdokumentasjon DALVIK DEBUG MONITOR SERVER (DDMS) DDMS kan gjennom ADB feil søke kjørende applikasjoner på emulatoren eller en tilkoblet enhet. Her kan man feil søke og overvåke nettverkstrafikk, diskplass, minnebruk o.l. ADOBE PHOTOSHOP Photoshop er et kraftig bilderedigeringsprogram. De flest ikoner og logoer er lagd eller redigert i dette programmet. UTVIDELSER OG RAMMEVERK ENTITY FRAMEWORK Entity Framework ( EF ) er et åpent kildekode rammeverk med ORM (object-relational mapping) for .NET. BOOTSTRAP Bootstrap er et front-end-rammeverk. Det er et bibliotek med verktøy for å designe nettsider og webapplikasjoner. Det inneholder HTML- og CSS-baserte design templates. JQUERY jQuery er et JavaScript-rammeverk, hvis hensikt er å forenkle bruken av JavaScript. Side 35 av 185 Prosessdokumentasjon JSON (JAVASCRIPT OBJECT NOTATION) JSON er en tekst basert struktur for enkel overføring av data. Avledet fra, men allikevel uavhengig av JavaScript. STUDIODONDER TESTHELPER Testhelper er en utvidelse til Visual Studio som brukes når man skal enhetsteste webapplikasjoner. TOASTR Toastr er et notifikasjonsbibliotek for JavaScript. Brukes til å gi enkle tilbakemeldinger til brukere. VERSJONSKONTROLL TEAM EXPLORER/TEAM FOUNDATION SERVER (TFS) TFS er en funksjon integrert i Team Explorer og gjør det mulig å endre kode, hente gamle versjoner og laste opp nye versjoner. DROPBOX Dropbox er et filarkiv som ligger lagret på internett men vises på datamaskinen. Det ble brukt som versjonskontroll for Android-applikasjon. Side 36 av 185 Prosessdokumentasjon DOKUMENTASJON MICROSOFT WORD Word er et tekstredigeringsprogram utviklet av Microsoft. Programmet gjør det enkelt å forfatte innhold, plassere grafikk og endre stiloppsett. YED yEd er en skrivebords applikasjon som brukes til å generere diagrammer og oversikt over entiteter. UTVIKLINGSPROSESSEN I dette kapitlet beskriver vi de forskjellige fasene i utviklingsprosessen. Etter konseptutviklingsfasen vil vi dele opp denne delen i to deler, en for hver av produktene. Utviklingsprosessene til Android- og webapplikasjonen blir beskrevet i hver sin del. Dette for å enklere kunne få innsikt i produktene individuelt. KONSEPTUTVIKLING RISIKOPLAN I begynnelsen av prosessfasen utformet vi en risiko plan for å bevisstgjøre alle medlemmene hvilke utfordringer som kunne oppstå i løpet av prosjektperioden. Det var viktig å komme med forslag på tiltak som kunne forhindre og møte på disse utfordringene. Side 37 av 185 Prosessdokumentasjon KORTVARIG SYKDOM/FRAVÆR Risikonivå: Høy Konsekvens: aktiviteter kan bli forsinket eller ikke gjort, avhengig av sykdommens hemming. Forebygging: kommunisere med gruppen, legge dokumenter ut i Dropbox/Team Foundation og sørge for at de andre gruppemedlemmene er klar over situasjonen, og kan hjelpe til med- eller ta over eventuelle oppgaver. LANGVARIG SYKDOM/FRAVÆR Risikonivå: Lav Konsekvens: mer arbeid på resten av gruppen, aktiviteter kan bli forsinket og det blir hull i aktivitetsplanen som må fylles opp. Forebygging: gruppemedlem må kommunisere med gruppen, legge dokumenter ut i Dropbox/Team Foundation og sørge for at de andre gruppemedlemmene er klar over situasjonen. Gruppen må fylle opp eventuelle hull i arbeidsfordeling, og holde god kommunikasjon. TIDSKLEMME Risikonivå: Middels Konsekvens: Kan risikere å ha så dårlig tid at ting leveres uferdig, eller i verste fall at vi ikke får levert i tide, og dermed får trekk i karakter/stryk. Forebygging: Starte tidlig å fordele oppgavene. Jobbe effektivt når vi møtes, og hele tiden å ha god kommunikasjon. TAP AV DATA Risikonivå: Lav Konsekvens: Miste arbeidet vårt, og må gjøre ting på nytt. Da vil det også få konsekvenser for tidsfristene. Side 38 av 185 Prosessdokumentasjon Forebygging: Bruke Dropbox/Team Foundation, samt være flinke til å stadig lagre dokumenter lokalt for å ha back-up lagret på flere steder. KONFLIKTER I GRUPPA Risikonivå: Lav Konsekvens: Bli uenige om prosjektet. Kan skape dårlig arbeidsmoral. Kan gi dårligere resultat. Forebygging: Gjøre de oppgavene vi må. Møte opp på møter. Bli ferdig til avtalt tidsfrister. Være behjelpelige og imøtekommende. DATAINNSAMLING Fra første stund har vi visst hva hovedfunksjonen til applikasjonen vår skulle være. Vi fikk derimot veldig frie tøyler når det kom til hvordan vi skulle nå målene. Det fantes ingen tidligere utgave av applikasjonen, så vi måtte planlegge og bygge alt fra bunnen. Vi forespeilet oss en applikasjon basert på samme konsept som Dropbox, en lagringstjeneste på internett. Oppdragsgiver hadde i svært liten grad spesifisert noen krav til løsningen på forhånd. Datainnsamlingen foregikk derfor kontinuerlig gjennom hele prosjektperioden. Personlige møter og annen kommunikasjon har vært en viktig del av dette prosjektet. Vi fikk innspill fra oppdragsgiver i møter og på mail og utviklet prototyper som oppdragsgiver kunne teste. Deretter fikk vi tilbakemeldinger og kunne endre prototypene slik at løsningene samsvarte med oppdragsgivers ønsker og forventninger. MÅLGRUPPE OG BEHOV Oppfølgingsverktøyet vi har utviklet skal forenkle hverdagen til oppdragsgiver. Produktet vårt er først og fremst rettet mot oppdragsgiver og andre parter involvert i oppdragsgivers arbeidsoppgaver. Det er i all hovedsak ment som et internt oppfølgingsverktøy, og har dermed en ganske smal målgruppe. I tillegg er det lite variasjon i hvem de eksterne partene er. Det kan være et stort sprik i alder, og valgene våre har blitt påvirket av dette. Side 39 av 185 Prosessdokumentasjon GRUPPEMØTER OG BRAINSTORMING Etter den innledende datainnsamlingen begynte vi med hyppige gruppemøter. For å samle tankene og organisere arbeidet var dette nødvendig. Det vi følte var viktigst å gjøre først var å skissere modeller av databasen. Produktet er avhengig av en godt utformet database. Vi antok at det kom til å bli gjort en del endringer underveis, men det var viktig med et godt utgangspunkt. Vi begynte også tidlig med skissering av brukergrensesnittet til både web- og androidapplikasjonen. Oppdragsgiver var opptatt av at begge applikasjonene skulle ha en minimalistisk stil og være intuitiv å bruke. Etter noen uker med diskusjon, skissering og prototyping var vi klare til å presentere konseptet for oppdragsgiver. TESTING AV ANDROIDAPPLIKASJON Se vedlegg 1. TESTING AV WEBAPPLIKASJON Se vedlegg 1. FAGLIGE UTFORDRINGER DESIGN AV WEBAPPLIKASJONEN En av de største utfordringene vi har hatt er å designe webapplikasjonen. Oppdragsgiver ønsket seg et mest mulig minimalistisk design. Vårt hovedfokus har dessuten vært på funksjonalitet, og design har ikke vært hovedprioritet. Det viktigste har vært å lage et rent og forståelig design i admin- og brukerdelen av webapplikasjonen. All funksjonaliteten hos admin kan skape forvirring i navigasjonen, så vi har lagt mye vekt på brukerveiledningen. Side 40 av 185 Prosessdokumentasjon ANDROID – PHP – WEBSERVER Å få Android-applikasjonen til å kommunisere med webserveren har vært en utfordring. Vi ble tvunget til å ha et knippe PHP-filer som mellomledd. Etter mye prøving og feiling fikk vi bekreftet kontakt mellom applikasjonene. Det oppstod i midlertidig trøbbel da vi implementerte login-funksjonen i mobilapplikasjonen. Resultatet av hashing av samme passord på de forskjellige applikasjonene ga forskjellig resultat. Tatt i betraktning at mobilapplikasjonen har begrenset funksjonalitet og et fåtall brukere, valgte vi derfor å droppe kravet om å logge inn. AVANSERT DATABASE Databasen til webapplikasjonen er den mest avanserte databasen vi har lagd. Mange modeller og relasjoner har gjort den kompleks. I tillegg hadde vi bekymringer for hvordan det skulle gå med kommunikasjonen på tvers av applikasjonene. Det viste seg å fungere som ønsket, men databasen har krevd mer tid og arbeid enn planlagt. MANGELFULL ENHETSTESTING Selv om testdrevet utvikling ikke har vært i hovedfokus, har vi utviklet noen enhetstester. Dessverre fikk vi ikke tid underveis til å lage like mange vi i utgangspunktet ønsket og det endte med et litt mangelfullt sett med slike tester. Med tanke på webapplikasjonens omgang kunne vi med fordel satt av mer tid til dette. Planlegging av tidsbruk rundt utviklingen av disse kunne vært bedre. Side 41 av 185 Prosessdokumentasjon PERSONVERN OG KONFIDENSIALITET Under utformingen av produktet vårt har vi hele tiden blitt tvunget til å tenke på konfidensialitet og sikkerhet. Dette gjaldt både for innloggingsinformasjon og rundt opplastede dokumenter. For oppdragsgiveren vår er det særdeles viktig å holde visse dokumenter skjult for andre parter. Kunder skal ikke ha innsyn i et prosjekts budsjett, en murer skal ikke kunne se en annen murers kontrakt osv. Mange av dokumentene vil inneholde sensitiv informasjon om forskjellige parter, og det er viktig og påkrevd at denne typen informasjon beskyttes og hemmeligholdes. Dette har vi løst ved at administrator må manuelt gi tilgang til hver fil, og på denne måten unngå filrettigheter på ville veier. Det er også lagt til rette for rask fjerning av filrettigheter. DOKUMENTASJONSFASEN Denne fasen ble påbegynt dagen gruppen ble dannet, og varte helt til prosjektet ble avsluttet. Tidlig i prosjektet var det styringsdokumentene som hadde hovedfokus med sluttrapporten liggende i bakhodet. Vi utformet en mal til sluttrapporten tidlig, og gjorde den mer utfyllende underveis. Vi noterte stikkord i sluttrapporten hele tiden, noe som gjorde det lettere å huske alle elementer som skulle med i rapporten. Utformingen av sluttrapporten har vært en oppgave alle gruppemedlemmene har deltatt på. Som tidligere forklart ble gruppen vår etter hvert delt inn i to grupper etter applikasjonene, og hver gruppe hadde derfor et bedre grunnlag til å greie ut om sin respektive applikasjon. For å kunne holde styr på alle delene i rapporten har vi brukt DropBox som lagringssted, men vi har jobbet lokalt for å unngå overflødige kopier. Dokumentasjonsstandarden til HiOA har blitt brukt flittig, selv om den enkelte ganger har virket mot sin hensikt og skapt mer forvirring. Hovedprosjektet vårt har omfattet utviklingen av to applikasjoner, og det har derfor vært nødvendig med noen endringer i sluttrapportens oppsett. Vi har prøvd etter beste evne å tolke det som standarden beskriver, og føler vi har fulgt standarden i stor grad. Side 42 av 185 Prosessdokumentasjon KRAVSPESIFIKASJONEN OG DENS ROLLE Kravspesifikasjon har hjulpet oss med å utforme user stories. Vi har brukt kravspesifikasjonens brukerbehov til å lage mer spesifikke brukerkrav. Dette var krav oppdragsgiver satte for oss. Kravene ble rangert etter viktighet, og tilhørende funksjoner implementert i rekkefølge sprint vis. Dette gjorde vi for at oppdragsgiver fortest mulig kunne teste og gi tilbakemeldinger på de viktigste og mest sentrale funksjonalitetene. På denne måten blir det enklere å droppe funksjoner som ikke er essensielle for produktet vårt, skulle det oppstå tidsnød. Underveis i prosjektperioden har krav og rammebetingelser endret seg. Både ved at oppdragsgiver har kommet med nye ønsker og tanker, og ved at utviklingsteamet har kommet med forslag. Den største endringen var å droppe utviklingen en iOS-versjon av Android-applikasjonen. Det var i utgangspunktet usikkert om det var et behov for en mobilapplikasjon for iOS-plattformen. Da det viste seg at ingen i applikasjonens brukergruppe var i besittelse av mobile enheter med dette operativsystemet, ble denne idéen forkastet. AVSLUTTENDE DEL ORD FRA OPPDRAGSGIVER Se vedlegg 4. SAMARBEID I GRUPPEN Når man skal jobbe tett på hverandre over en lengre periode er det viktig å unngå konflikter og sørge for å skape et positivt arbeidsmiljø. Problemer innad i gruppa kunne ha ført til tidspress og at oppdragsgiver endte opp med et produkt som ikke holdt mål. Dette har aldri vært et aktuelt problem. Alle gruppemedlemmene kjenner hverandre godt, og samarbeidet har fungert meget bra. Man må forholde seg til oppgaven, samspill og planlegging på en helt annen måte når man jobber i grupper. Etter vår oppfatning har dette gått knirkefritt. Side 43 av 185 Prosessdokumentasjon I begynnelsen av prosjektet jobbet hele gruppen sammen, men etter konseptutviklingen delte vi oss i to grupper. Én gruppe fokuserte på webapplikasjonen, og den andre fokuserte på Android-applikasjonen. Gruppene jobbet alltid sammen og kunne hjelpe hverandre hvis det behøvdes. Alle valg har blitt diskutert i plenum og blitt løst demokratisk. Vi har alle hatt ulike roller og forskjellige oppgaver gjennom hele prosjektet. Vi utnevnte en gruppeleder tidlig i prosjektet, men gjorde det klart at alle skulle være med å bestemme. Når vi har delt ut ansvar for forskjellige områder og oppgaver har vi sagt at den som får ansvaret ikke nødvendigvis skal gjøre alt selv, men ta ansvar for at det blir gjort – og eventuelt hjelpe til, dersom noen trenger det. VEILEDNING VED HIOA Den interne veilederen vår Kirsten Ribu har først og fremst gitt oss tips og råd om selve bachelorprosjektet. Hva som er viktig å huske på i dokumentasjonen, viktigheten med planlegging og tips for å unngå tidsklemmer. Hennes kompetanse har hjulpet oss å komme i mål med prosjektet. Kommunikasjonen med Kirsten har stort sett foregått gjennom fronter, da hun som regel befant seg andre steder enn kontoret sitt. De gangene vi hadde mer tekniske spørsmål, henvendte vi oss til tidligere forelesere. Tor Krattebøl er faglærer og underviser i Webapplikasjoner (ITPE3200) og Torunn Gjester er faglærer og underviser i Applikasjonsutvikling (DAVE3600). Disse var stort sett alltid tilgjengelig, det var bare å oppsøke kontoret deres. Veiledningen deres har vært verdifull og til stor hjelp. Vi er veldig fornøyd med veiledningsmulighetene under bachelorprosjektet. Vårt inntrykk er at veiledere og forelesere har ønsket å gjøre sitt ytterste for å hjelpe studentene med å oppnå best mulig resultat. Dette vil vi takke for. LÆRINGSUTBYTTE Før hovedprosjektet hadde vi gode kunnskaper innen kodespråkene C#, Java, CSS, HTML. Erfaring med utviklerrollen i et stort prosjekt var helt ny, og vi er sikre på at denne erfaringen vil gagne oss i arbeidslivet. En liten del av prosjektperioden har gått med på å lese oss opp på teknologien vi har benyttet, men stort sett har vi fulgt konseptet «learning by doing». Blant kilder vi har brukt hyppigst inngår både StackOverflow, YouTube og C# Corner. Vi føler vi har lært masse nytt om utviklingsprosessen, og hvor vanskelig det er å estimere hvor lang tid man kommer til å bruke på de forskjellige delene i et prosjekt. Vi har fått erfaring med Side 44 av 185 Prosessdokumentasjon smidig utvikling, noe vi tidligere bare kunne i teorien. Vi har også fått erfaring med å koble en Android-applikasjon til en webserver og kommunisere med den. DET FERDIGE PRODUKTET NYTTEVERDI Idéen til webapplikasjonen kommer fra oppdragsgiver som arbeider med utbyggingsprosjekter. Etter flere år med prosjekter endte det med at han fikk en dårlig oversikt over hvilke filer som tilhørte hvilke prosjekter og ville ha en mulighet for å lagre alle filer på samme sted. Ettersom oppfølgingsverktøyet vårt lagrer alt av filer på en server og linker disse til hvilke prosjekter de hører til, vil dette løse problemet til oppdragsgiver. Oppdragsgiver arbeider også med å selge byggene som han bygger, dette innebærer å reklamere prosjektene sine slik at eventuelle kunder blir interessert. Dette gjøres fra webapplikasjonens forside ved at oppdragsgiver kan oppdatere informasjonen på nettstedet med informasjon og bilder om de pågående prosjektene. Kunder vil da kunne se prosjektet som det reklameres for, og via informasjonssiden kan kunden skaffe kontaktinformasjonen til oppdragsgiver for å få mer informasjon. Kunder kan avtale et kjøp med oppdragsgiver før et bygg er ferdigbygd. da vil det være nødvendig for daglig leder og holde kundene oppdaterte om hvordan utbyggingen går, og om eventuelle endringer i bygget. Nettstedet løser dette ved at administrator kan opprette en bruker som kan legges til et prosjekt og da bli lagt til som en kunde. En kunde vil da få innloggingsinformasjon og vil få en side på nettsiden, her har kunden en mappe med filer som administrator kan laste opp, som for eksempel bilder av kjøkkeninnredning. Dette gjør at oppdragsgiver slipper mye spørsmål fra kundene, fordi kundene har allerede informasjonen de skal ha på nettstedet. Vi utviklere har hatt stor nytte av å utvikle et så komplekst prosjekt. Vi har hatt ansvaret for organiseringen og oppbyggingen av produktet da oppdragsgiver ikke hadde noen kunnskap innen webutvikling. Når vi skulle starte utviklingen måtte vi finne ut av hvordan vi skulle løse de forskjellige problemstillingene oppdragsgiver hadde til oss. Dette ga oss god kunnskap for å utvikle et prosjekt helt fra starten av og sette alt sammen til en ferdigstilt løsning. Ettersom vi har arbeidet for en oppdragsgiver som ikke helt vet hva slags ferdig løsning han er ute etter, har vi lært mye om at det er noe funksjonalitet som vi ikke kunne implementere i løsningen ut ifra oppdragsgivers ønsker. Det var også veldig lærerikt å jobbe med noen som ikke helt vet hva han vil ha, og på den måten bli involvert i konseptutviklingsfasen. Vi fikk Side 45 av 185 Prosessdokumentasjon innsikt i alle deler av systemutvikling. Vi var nødt til å hele tiden å holde oppdragsgiver oppdatert med endringer og implementering. Tiden etter første møte med oppdragsgiver handlet mest om systemutvikling i teamet. Vi opplevde at det gikk litt for lang tid til neste møte, noe som er vår egen feil. Under det neste møte merket vi at oppdragsgiver hadde mange nye idéer og tanker, og vi var nødt til å endre mye som allerede var testet og ferdigstilt. Etter dette skjønte vi at vi var nødt til å oppdatere oppdragsgiver kontinuerlig gjennom hele prosjektutviklingen. Vi innså viktigheten av tett og jevnlig kommunikasjon med oppdragsgiver. VIDEREUTVIKLING Vi føler produktet vårt er et produkt som kan være veldig nyttig i mange forskjellige bransjer. Potensialet er stort, og det finnes mange bruksområder. Et oppfølgingsverktøy for oppdrag og prosjekter er nyttig, og noen endringer og tillegg i koden kan tilpasse verktøyet til å passe for andre bedrifter i andre bransjer. WEBAPPLIKASJON Webapplikasjonen vår er finjustert til å fungere for oppdragsgiver. Når man oppretter et prosjekt, opprettes det et bestemt antall brukergrupper og mapper. Ved en eventuell videreutvikling er det mulig å endre koden til nettstedet slik at den kan brukes i andre prosjekter enn utbyggingsrelaterte. Behovet for brukertesting blir større hvis produktet eventuelt skal videreutvikles til å kunne benyttes av flere typer bedrifter. Vi har først og fremst fokusert på oppdragsgiver og hans preferanser. Det er derfor et stort forbedringspotensial med utformingen av et universelt brukergrensesnitt. Muligheten til å legge til flere administratorer har blitt implementert, men har ikke blitt gjort tilgjengelig. Oppdragsgiver gjorde det klart at det kun er aktuelt med en administrator (Ketil Johansen). Tilgjengeliggjøring av denne funksjonen er enkel å gjøre, og kan bli nødvendig ved videre utvikling av verktøyet. Webapplikasjonen har best støtte i nettleseren Google Chrome. Oppløsningen varierer fra browser til browser, og dette er et område som er aktuelt for videreutvikling. Det samme gjelder skalering avhengig av skjermstørrelsen på enheten som benyttes. Side 46 av 185 Prosessdokumentasjon ANDROID-APPLIKASJON Android-applikasjonen er en lettere utgave av webapplikasjonen. Utviklingspotensialet i denne mobile applikasjonen er stort. Det ultimate vil være å utvikle den slik at den er et tilsvarende produkt til webapplikasjonen. Det aller første som må gjøres da er å implementere et login-system. Slik kan både brukere og administratorer logge seg inn og bruke verktøyet. Ettersom oppdragsgiver ikke hadde noe behov for å ha en mobilapplikasjon til Appleenheter, var denne idéen noe vi forkastet. Skulle det hende at verktøyet når et større publikum og flere brukere, hadde vi blitt tvunget til å utvikle en tilsvarende iOS-applikasjon for å nå et større publikum. Manglende skalering for større enheter må også gjøres noe med. Flere brukere betyr et større mangfold av enheter og varianter. KONKLUSJON Oppfølginsverktøyet vi har utviklet er et resultat av mangfoldige arbeidstimer. Oppgaven har vært utfordrende og interessant, og vi har fått ekstremt mye ut av perioden. Vi har fått erfart hvordan det er å jobbe som utvikler i et team, og hvordan man skal takle utfordringer og tidspress. I tillegg har vi vært nødt til å forholde oss til en oppdragsgiver, og det har vært ekstremt givende å kunne realisere oppdragsgivers visjon så godt som mulig. Vårt inntrykk er at vi har vært for dårlige til å planlegge i forkant av prosjektstart. Dette inkluderer også planlegging i konseptutviklingsfasen. Dette kan skyldes manglende forståelse av prosjektets størrelse. Vi hadde en mistanke om at konseptet for produktet var i minste laget, men dette tok vi helt feil av. Med bedre planlegging kunne vi ha oppnådd et enda bedre resultat. Kjemien og arbeidsmiljøet innad i utviklerteamet har vært positivt hele veien. De utfordringer vi har støtt på gjennom perioden har vi taklet på en god måte. Vi har hatt mange konstruktive diskusjoner, og tatt demokratiske valg. Det har vært en god tone mellom alle gruppemedlemmene, noe som er viktig og bidrar til positivitet og engasjement. Side 47 av 185 Prosessdokumentasjon På bakgrunn av oppdragsgivers respons sitter vi igjen med et positivt inntrykk av prosjektperioden. Vi føler at vårt produkt kan bidra til en bedre hverdag for oppdragsgiver og alle involverte parter. Med et inntrykk av høy måloppnåelse, ser vi tilbake på bachelorprosjektet som ekstremt lærerikt og givende. Side 48 av 185 Side 49 av 185 Produktdokumentasjon Webapplikasjon PRODUKTDOKUMENTASJON WEBAPPLIKASJON FORORD Produktet vi har utviklet er i all hovedsak et administrasjonsverktøy for oppdragsgiver, med unntak av noen sider med generell informasjon til andre besøkende. Kapitlene i denne rapporten tar for seg hvordan løsningen er bygget opp kodemessig, hvordan mappestrukturen ser ut på serveren og produktets funksjonalitet. Før denne rapporten leses vil det være fordelaktig å ha lest innledningen og presentasjonen av oppgaven. For å unngå eventuelle misforståelser med hensyn til terminologi refererer vi til ordlisten i vedlegg 2. Side 50 av 185 Produktdokumentasjon Webapplikasjon INNHOLD Forord.................................................................................................................................................................... 50 Innhold .................................................................................................................................................................. 51 Systemkrav og installasjon .................................................................................................................................... 53 Database-, kode- og mappestruktur ..................................................................................................................... 53 ER-diagram ........................................................................................................................................................ 53 Model View Controller (MVC) ........................................................................................................................... 54 MODEL (.cs) .................................................................................................................................................. 54 VIEWS (.cshtml) ........................................................................................................................................... 55 Administrator-mappen ............................................................................................................................ 57 Folder-mappen ........................................................................................................................................ 57 Home-mappen ......................................................................................................................................... 58 Project-mappen ....................................................................................................................................... 58 Report-mappen ........................................................................................................................................ 59 Shared-mappen ....................................................................................................................................... 59 User-mappen ........................................................................................................................................... 60 Controllers (.cs) ............................................................................................................................................. 60 ViewModels (.cs) ........................................................................................................................................... 61 Lagdeling ........................................................................................................................................................... 63 Mappestruktur .................................................................................................................................................. 64 Funksjonalitet........................................................................................................................................................ 65 Programflyt ....................................................................................................................................................... 65 Administrasjonsdel ............................................................................................................................................ 66 Administrasjon av prosjekter ........................................................................................................................ 66 LEgg til nytt prosjekt .................................................................................................................................. 66 Oversikt over prosjekter ............................................................................................................................ 67 FILBEHANDLING, Brukere og brukergrupper i prosjekt ............................................................................. 68 Rapporter .................................................................................................................................................. 69 Administrasjon av den offentlige delen (Content Management System) ..................................................... 71 Side 51 av 185 Produktdokumentasjon Webapplikasjon Administrasjon av brukere ............................................................................................................................ 71 Legge til, endre og slette ........................................................................................................................... 71 Brukergrupper ........................................................................................................................................... 72 Databaselogg ................................................................................................................................................. 72 Brukerdel ........................................................................................................................................................... 73 Filbehandling ................................................................................................................................................. 73 Prosjektfiler ............................................................................................................................................... 73 Personlige filer .......................................................................................................................................... 74 Offentlig del ...................................................................................................................................................... 74 Forside ........................................................................................................................................................... 74 Informasjonsside ........................................................................................................................................... 74 Tilbakemeldinger............................................................................................................................................... 75 Modaler ......................................................................................................................................................... 75 Toasts ............................................................................................................................................................ 75 Design.................................................................................................................................................................... 76 Fargebruk .......................................................................................................................................................... 76 Bootstrap........................................................................................................................................................... 77 Feilhåndtering ....................................................................................................................................................... 77 Try, Catch .......................................................................................................................................................... 77 Regex ................................................................................................................................................................. 78 Enhetstesting (Unit-Testing) ................................................................................................................................. 79 Sikkerhet ............................................................................................................................................................... 79 Hashing av passord ........................................................................................................................................... 79 Sessions ............................................................................................................................................................. 80 Videreutvikling av produktet ................................................................................................................................ 82 Side 52 av 185 Produktdokumentasjon Webapplikasjon SYSTEMKRAV OG INSTALLASJON For at webapplikasjonen skal kunne kjøre på internett, er brukeren nødt til å ha en server som kan kjøre .NET-løsninger for eksempel Windows Server og kunne sette opp en database for dette nettstedet. Serveren må også kunne kjøre en SQL-database. Det absolutt beste for løsningen er hvis brukeren har en server som både har webapplikasjonen og lagringsplassen på server, hvis ikke er det nødvendig å endre i koden til webapplikasjonen. Vi kjører per nå webapplikasjonen på azurewebsites hos microsoft, noe som er veldig gunstig for løsninger laget i Visual Studio med .NET-rammeverk. DATABASE-, KODE- OG MAPPESTRUKTUR ER-DIAGRAM Vi designet en ER-modell etter første møte med oppdragsgiver. Etter vi hadde begynt på webapplikasjonen og kom på neste møte, måtte vi fort legge fra oss denne modellen. Nettstedet ble veldig komplekst på kort tid, og vi måtte utvikle databasemodeller fortløpende gjennom prosjektet. Figuren under viser hva vi endte med. Figur 6: ER-modell Side 53 av 185 Produktdokumentasjon Webapplikasjon MODEL VIEW CONTROLLER (MVC) Produktet er satt opp i en bestemt arkitektur kalt MVC. MVC går ut på å skille programmet i tre deler, der modellen tar hånd om data og viewet håndterer brukergrensesnittet. Kommunikasjonen mellom disse går via kontrolleren. Under er en oversikt over hva som befinner seg i vår løsning under disse tre delene og mer informasjon om hva de utretter. MODEL (.cs) Modellklassene i løsningen representerer objekter og er definert med egenskaper. Alle modellklassene har en definert primærnøkkel ved navn “ID” i form av en integer. Under følger et enkelt eksempel av en slik klasse. namespace Model { public class Admin : IEntity { [Key] public int ID { get; set; } public string Username { get; set; } public string Password { get; set; } } } KLASSE BESKRIVELSE Admin User UserGroup AccessFile Project ProjectLink ConditionReport Report Modell for adminbrukere Modell for brukere Modell for brukergrupper Modell for linking av filer til brukere Modell for prosjekter Modell for linking av prosjekter og brukere Modell for tilstandsrapporter Modell for en av delene til tilstandsrapporter MeetReport Modell for møterapporter Attending Modell for linking mellom deltakere og møterapporter Side 54 av 185 Produktdokumentasjon Webapplikasjon Protocol Modell for en av delene til møterapport DeviationReport Modell for avviksrapport del 1 DeviationTreatment Modell for avviksrapport del 2 (behandling) DeviationConsequens Modell som mellomledd i avviksrapport del 2 DeviationClosure Modell for avviksrapport del 3 (avslutning) InjuryReport Modell for skaderapporter InjuryType Modell som mellomledd i skaderapport for skadetype ReportImage Modell for bilder tilhørende rapporter Image Modell for bilder FrontPage Modell for nettsidens forside InfoPage Modell for nettsidens “Om oss” Audit Modell for databaselogg IEntity* Modell for IEntity interface *IEntity-klassen skiller seg ut fra de andre modellene da det er et interface for å hente ut egenskapene til de øvrige modellene. Når dataen er hentet blir dette lagret i klassen Audit.cs og kan videre listes ut som databaselogg i viewet AuditLog.cshtml. VIEWS (.cshtml) Views er grensesnittet på siden som har i oppgave å vise informasjon til brukerne. Views består stort sett av HTML (HyperText Markup Language), men også C# for å liste ut informasjon fra modeller og noen JavaScript. Informasjonen fra modellen blir hentet og forberedt av kontrolleren og deretter sendt til viewet for presentasjon. Øverst defineres alltid hvilken model som skal brukes, og informasjonen som finnes i dette objektet listes ut i en C# foreach. Under følger et eksempel på et view. Side 55 av 185 Produktdokumentasjon Webapplikasjon @model PagedList.IPagedList<Model.UploadFile> @using PagedList.Mvc; @{ ViewBag.Title = "ProjectFiles"; } <h2>ProjectFiles</h2> <table> <tr> <th>Filnavn</th> <th>Dato</th> </tr> @foreach (var item in Model) { using (Html.BeginForm()) { <tr> <td><a href="~/Folders/Projects/@Session["ProjectName"] /@item.File name" download>@item.Filename</a></td> <td> </td> <td>@Html.DisplayFor(modelitem => item.UploadDate)</td> </tr> } } </table> // Kode for oppsett av sider Side @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) av @Model.PageCount @Html.PagedListPager(Model, page => Url.Action("UserFolder", new { page })) I løsningen er det lagt opp undermapper til views der det ligger .cshtml-filer som tilhører mappens kategori. Figur 7: Oversikt over View-mapper Side 56 av 185 Produktdokumentasjon Webapplikasjon Administrator-mappen KLASSE _PartialFileDelete _PartialFrontPage _PartialInfoPage _PartialInfopageFileDelete AuditLog Create CreateFolder CreateProject CreateUser CreateUsergroup EditFolder EditFrontpage EditInfopage EditProject EditUser EditUsergroup Error Index ListProjects ListUsergroups ListUsers ProjectUser BESKRIVELSE PartialView for sletting av filer PartialView for opplasting av bilder til forsiden PartialView for opplasting av bilder til “Om oss” PartialView for sletting av filer på “Om oss” View for visning av databaseloggen. (Endret, slettet, lagt til. Hvilken bruker som har gjort det) View for å lage administrator (NB! Ikke aktivt på nettet) View for opprettelse av mapper View for opprettelse av prosjekter View for opprettelse av brukere View for opprettelse av brukergrupper View for endring av mappe View for endring av nettsidens forside View for endring av nettsidens “Om oss”-side View for endring av prosjekt View for endring av bruker View for endring av brukergruppe View som en blir omdirigert til om noe går galt med en passende feilmelding via TempData View som viser administratorpanelets forside View med liste av alle prosjekter i databasen View med liste av alle brukergrupper i databasen View med liste av alle brukere i databasen View for å legge til brukere til et prosjekt Folder-mappen KLASSE _PartialFolderIndex _PartialPartial _PartialProjectFiles _PartialUserFolder AddFileUser FolderAdmin FolderFiles BESKRIVELSE Lister ut brukergrupper sine mapper i prosjekt Brukes ikke Brukes ikke Brukes ikke Brukes ikke Brukes ikke Veiw for å gi filrettigheter til brukergrupper i et prosjekt Side 57 av 185 Produktdokumentasjon Webapplikasjon Index ProjectFiles subFolder UserFolder UserPersonalFolder View for å liste brukergruppers mapper i et prosjekt View for å gi filrettigheter til brukere i et prosjekt View for å liste filer inne i en brukergruppe tilhørende et prosjekt View for å liste en brukergruppes filer i et prosjekt (på brukersiden) View for å liste alle filer en bruker har lastet opp eller har tilgang til å se Home-mappen KLASSE _PartialAbout _PartialIndex About Index Login LoginFailed Mail BESKRIVELSE PartialView som viser bilder på nettsidens “Om oss” Hovedview for “Om oss” View for nettstedets startside View for login-modal View som oppsdaterer seg med feilmeldinger om brukeren har skrevet inn feil innloggingsinformasjon PartialView for sending av e-mail via kontakt oss på “Om oss” Project-mappen KLASSE BESKRIVELSE _PartialProjectIndex PartialView tilhørende valgts prosjekts hovedside som viser prosjektets mapper View som lister alle filer tilhørende valgt prosjekt View for valgt prosjekts hovedside View for å legge til brukere i valgt prosjekt View for listing av alle brukere tilhørende valgt prosjekt View for å legge til brukere i brukergruppe tilhørende valgt prosjekt FilesInProject Index InsertUserToProject ListProjectUsers UserToUsergroup Side 58 av 185 Produktdokumentasjon Webapplikasjon Report-mappen KLASSE BESKRIVELSE _PartialShowConditionReport PartialView som viser bilder tilhørende valgt tilstandsrapport PartialView som viser avviksskjema del 3 PartialView som viser avviksskjema del 2 View som lister alle tilstandsrapporter i databasen View som lister alle avviksrapporter i databasen View som lister alle skaderapporter i databasen View som lister alle møterapporter i databasen View for opprettelse av ny tilstandsrapport View for opprettelse av ny avviksrapport (del 3) View for opprettelse av ny avviksrapport (del 1) View for opprettelse av ny avviksrapport (del 2) View for endring av valgt tilstandsrapport View for endring av valgt avviksrapport View for endring av valgt skaderapport View for endring av valgt møterapport View for opprettelse av ny skaderapport View for opprettelse av ny møterapport View for å vise valgt tilstandsrapport View for å vise valgt avviksrapport (alle tre delene via partialviews om de finnes) View for å vise valgt skaderapport View for å laste opp bilde til valgt rapport _PartialShowDeviationClosure _PartialShowDeviationTreatment AllConditionReports AllDeviationReports AllInjuryReports AllMeetReports ConditionReport DeviationClosure DeviationReport DeviationTreatment EditConditionReport EditDeviationReport EditInjuryReport EditMeetReport InjuryReport Meetsummary ShowConditionReport ShowDeviationReport ShowInjuryReport UploadImage Shared-mappen KLASSE _Layout _PublicLayout BESKRIVELSE Standard MVC layoutview som inkluderes på alle administratorsider Standard MVC layoutview som inkluderes på alle ikke-administratorsider Side 59 av 185 Produktdokumentasjon Webapplikasjon User-mappen KLASSE _PartialUser _PartialUserIndex _PartialUserProjects Index UserIndex BESKRIVELSE Brukes ikke PartialView for å vise en brukers personlige mappe PartialView for å liste hvilke prosjekter en bruker er med i View når administrator er inne på en bruker View for å vise en brukers “Min side” CONTROLLERS (.CS) Kontrollerne er satt opp med navn som tilsvarer viewundermappenes navn. Dette vil eksempelvis si at AdminController.cs tar seg av kommunikasjonen mellom views under Admin-mappen og modellene disse bruker. Kontroller-metoder er stort sett ActionResults som returnerer views på en av to varianter. Forskjellen på disse to variantene er at den ene åpner viewet med likt navn som ActionResulten, og den andre sender videre eventuell informasjon fra det åpnede viewet med HttpPost. public ActionResult CreateUser() { //return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult CreateUser(UserViewModel UserView) { //Opprette nytt objekt av User med det som sendes med i UserView //Databasemetoder //Fange exceptions } Side 60 av 185 Produktdokumentasjon Webapplikasjon KLASSE AdminController FolderController HomeController ProjectController ReportController UserController BESKRIVELSE Kontrollermetoder tilhørende adminviews og deres tilhørende objekter Kontrollermetoder tilhørende mappeviews og deres tilhørende objekter Kontrollermetoder tilhørende publicviews og login/logout Kontrollermetoder tilhørende prosjektviews og deres tilhørende objekter Kontrollermetoder tilhørende rapportviews og deres tilhørende objekter Kontrollermetoder tilhørende brukerviews og deres tilhørende objekter VIEWMODELS (.CS) ViewModels er brukt i løsningen for å enkelt ha mulighet til å vise akkurat den informasjonen vi ønsker fra modeller. Forskjellen på disse og vanlige modeller er at vi kan bygge de opp slik vi vil og ikke nøyaktig slik som de ordinære database-modellene. Eksempelet under illustrerer hvordan denne teknikken er tatt i bruk for å kunne hente ut både UsergroupID og UserID i samme view, opprette en SelectList med brukergrupper og i tillegg bruke IPagedList for å kunne ha flere sider med informasjon. namespace Takst.Views.ViewModels { public class UserUsergroupViewModel { public SelectList Usergroup { get; set; } public PagedList.IPagedList<User> User { get; set; } public IEnumerable<User> Users { get; set; } public int UsergroupID { get; set; } public int UserID { get; set; } } public class ListUserUsergroupViewModelList { public List<UserUsergroupViewModel> ListUserUsergroup { get; set; } } } Side 61 av 185 Produktdokumentasjon Webapplikasjon KLASSE AdminViewModel AttendingViewModel AuditLogViewModel ConditionReportViewModel DeviationClosureViewModel DeviationReportFullViewModel DeviationReportViewModel DeviationReportTreatmentModel FolderViewModel FrontpageViewModel InfoPageViewModel InjuryReportViewModel ListUsergroupViewModel ListUsersViewModel MeetReportViewModel ProjectFilesViewModel ProjectUserViewModel ProjectViewModel ProtocolViewModel ReportViewModel UsergroupViewModel UserUsergroupViewModel UserViewModel BESKRIVELSE ViewModel for admin ViewModel for attenders (knyttet til møterapport) ViewModel for auditlog ViewModel for tilstandsrapport ViewModel for avviksrapport (del 3) ViewModel for avviksrapport (visning av alle delene sammen) ViewModel for avviksrapport (del 1) ViewModel for avviksrapport (del 2) ViewModel for mapper ViewModel for forsiden ViewModel for “om oss”-siden ViewModel for skaderapporter ViewModel for listing av brukergrupper ViewModel for listing av brukere ViewModel for møterapporter ViewModel for prosjektfiler ViewModel brukere knyttet til prosjekt ViewModel for prosjekt ViewModel for protokoll (knyttet til møterapport) ViewModel for rapporter ViewModel for brukergrupper ViewModel for brukere i brukergrupper ViewModel for brukere Side 62 av 185 Produktdokumentasjon Webapplikasjon LAGDELING Figuren til høyre viser hvilke lag vi har i løsningen. BLL (Business Logic Layer) - Logikk og metoder som kaller på databasemetoder i DAL. DAL (Data Access Layer) - DAL-laget tar seg av spørringer direkte til databasen. Model - Databasemodeller. Takst - Kontrollere, Views og ViewModels UnitTest - Automatiserte tester for kontrollerne. Figur 8: Lagdelingen Denne lagdelingen er satt opp slik at dataforespørsler fra brukergrensesnittet ikke snakker direkte med databasemetodene, men i stedet via et ekstra lag som sender informasjonen videre til databasespørringene. Figur 9: Hieriarki i lagdeling Side 63 av 185 Produktdokumentasjon Webapplikasjon MAPPESTRUKTUR For å få en forståelse av mappestrukturen som blir satt opp på serveren og omtalt i neste kapittel om funksjonalitet, følger her en figur av mappehierarkiet til prosjekter. I tillegg til disse har alle brukere en personlig mappe der de kan få personlig tilgang til filer. Figur 10: Mappestrukturen Side 64 av 185 Produktdokumentasjon Webapplikasjon FUNKSJONALITET PROGRAMFLYT Figur 11: Programflyt Aktivitetsdiagrammet over viser hovedflyten gjennom webapplikasjonen. Dette er tatt med for å gi en dypere forståelse av punktene som blir gjennomgått i de neste avsnittene og kan brukes som en referanse videre i produktrapporten. Underveis i navigasjonen rundt på nettstedet har brukere og administrator mulighet til å gå tilbake via en tilbakeknapp fra alle sidene, såfremt det ikke er erstattet med en avbrytknapp. I tillegg har vi i diagrammet unngått å ta med tilbakemeldinger i form av bekreftelser og feilmeldinger, selv om dette er implementert om det for eksempel blir lagt til eller slettet elementer fra databasen. Noe av prosjektadministrasjonen er forenklet i dette diagrammet. Side 65 av 185 Produktdokumentasjon Webapplikasjon ADMINISTRASJONSDEL Hovedfunksjonaliteten til nettstedet er å tilby et oppfølgingsverktøy for firmaets utbygningsprosjekter. Dette innebærer mange involverte parter, rapporter og andre filer, og administrasjonsdelen gir muligheten for å holde kontroll på dette digitalt. I avsnittene under blir det utredet hvordan vi har satt opp dette. Figur 12: Administrasjonspanelet ADMINISTRASJON AV PROSJEKTER LEGG TIL NYTT PROSJEKT Fra administratorpanelets forside kan det opprettes nye prosjekter. Dette er gjerne første steg når nye prosjekter settes i gang og i senere avsnitt blir det tatt for seg hvordan filbehandling og tildeling av rettigheter til brukere gjøres. Når nye prosjekter lages vil det også settes opp en forhåndsbestemt mappestruktur på serveren. Eksempelvis blir hovedmappen til prosjektet opprettes slik: var NewFolder = new Folder() { Title = inProject.Projectname Figur 13: Opprette nytt prosjekt Side 66 av 185 Produktdokumentasjon Webapplikasjon }; Tilsvarende legges det automatisk til 36 undermapper til prosjektet som representerer ulike kategorier og brukergrupper som vil være involverte i prosjektet. En oversikt over hele mappehierarkiet ligger i avsnittet om mappestruktur. OVERSIKT OVER PROSJEKTER Figur 14: Prosjektliste Pågående og fullførte prosjekter blir listet ut i oversikten som vist på bildet over. Herfra har administrator også mulighet til å legge til flere prosjekter, samt redigere, slette eller fullføre prosjektene i listen. Side 67 av 185 Produktdokumentasjon Webapplikasjon FILBEHANDLING, BRUKERE OG BRUKERGRUPPER I PROSJEKT Figur 15: Brukervalg i prosjekt Figur 16: Filvalg i prosjekt En sentral del av administrasjonsmulighetene under prosjekter er å tilegne rettigheter til brukere og brukergrupper. Nærmere bestemt vil dette si å velge hvem som skal ha tilgang til filene som ligger i mappene på serveren. På figurene til høyre ser vi disse valgmulighetene som ligger under et valgt prosjekts administratorforside. Via involverte brukere kan brukere legges inn i prosjektets brukergrupper og få rettigheter til filer via gruppen, eller få personlige rettigheter til filer slik at de kan aksesseres gjennom brukerens personlige mappe. Sistnevnte eksempel er vist på figuren under der en bruker som allerede har blitt lagt til i prosjektet vises i en dropdown-liste og gis tilgang til filen til venstre. Figur 17: TIldeling av filrettingheter Side 68 av 185 Produktdokumentasjon Webapplikasjon RAPPORTER Figur 18: Rapporteringsmeny Via prosjektmenyen kan administrator legge inn rapporter tilhørende prosjektet. Rapporter er sammen med filbehandling hovedfunksjonaliteten på siden, da alle rapporter nå kan lagres digitalt i stedet for på papir, men med muligheten til utprinting i fint format. Figur 19: Liste over møterapporter Figuren over viser hvordan rapporter listes ut innenfor et prosjekt etter de har blitt opprettet via et standard utfyllingsskjema med diverse valg. Denne listingen er lik for møtereferat, skaderapport og tilstands-/fremdriftsrapport, med valg om å redigere, slette, laste opp bilde eller vise rapporten i printformat. Side 69 av 185 Produktdokumentasjon Webapplikasjon Figur 20: Liste over avviksskjemaer Avviksskjemaene er forskjellige fra de øvrige da det finnes tre deler av dem. Fra oversikten over disse skjemaene under gitt prosjekt har man mulighet til å velge å behandle avviket eller avslutte det, der begge er rapporter med skjema som må utfylles. Velger man å redigere eller printe dette får man med alle delene sammen. Figur 21: Print av skaderapport Side 70 av 185 Produktdokumentasjon Webapplikasjon Her følger et bilde som viser hvordan en skaderapport blir seende ut i printformat. Det vises i tillegg en topptekst med dato og “Vis skaderapport – Takst og Prosjektkontroll AS”. ADMINISTRASJON AV DEN OFFENTLIGE DELEN (CONTENT MANAGEMENT SYSTEM) Administratorer kan endre tekst og legge til bilder i bildekarusellen på forsiden eller på “Om oss”-siden. Dette gjøres via enkle tekstbokser og en lik filopplastningsmetode som det er andre steder på siden. Figur 22: Nettsidekontroll (CMS) ADMINISTRASJON AV BRUKERE LEGGE TIL, ENDRE OG SLETTE Brukere kan som nevnt i forrige avsnitt bli opprettet og koblet direkte til prosjekter, men det finnes også en mulighet for å legge dem til uten knytninger til prosjekter. Dette gjøres via skjemaer likt som ved opprettelse av prosjekt. Disse brukerne vil være i personer som jobber under prosjekter for arbeidsgiver og kan senere bli gitt tilgang for å laste opp filer i sin personlige mappe eller prosjektmapper. Side 71 av 185 Produktdokumentasjon Webapplikasjon Det er kun administrator som har mulighet til å opprette brukere på nettstedet og gi innloggingsinformasjonen videre til de aktuelle personene. BRUKERGRUPPER I tillegg til de automatisk genererte brukergruppene som blir lagt til ved prosjektopprettelser kan administrator legge til egendefinerte grupper. Disse kan som alle andre grupper bli tilegnet rettigheter for å se diverse filer og dokumenter på serveren. DATABASELOGG Ettersom brukere har muligheten til å laste opp filer og det kan bli opprettet flere administratorer, er det lagt til en databaselogg. Her kan administrator se hva som er blitt gjort på databasen. Det listes også ut hvilken bruker som har gjort endringer og når dette skjedde. Side 72 av 185 Produktdokumentasjon Webapplikasjon BRUKERDEL Figur 23: Brukers side FILBEHANDLING PROSJEKTFILER Brukere kan bli satt på en brukergruppe i et prosjekt, som for eksempel kunder. Når brukeren logger inn vil han kunne se en liste av alle prosjektene som brukeren er lagt til i, og her vil all informasjon brukeren trenger om et prosjekt ligge. Brukeren kan trykke seg inn på et prosjekt og her vil alle filer og dokumenter brukeren eller dens brukergruppe har Side 73 av 185 Produktdokumentasjon Webapplikasjon tilgang til ligge. Filene vil kunne bli lastet ned av brukeren ved å trykke på dem. PERSONLIGE FILER Alle brukere har en personlig mappe på nettsiden som kun er synlig for brukeren og administrator. Dette vil for eksempel være kontrakten til en snekker i et firma som administrator har lastet opp til brukeren. Her kan også brukere laste opp egne filer som kan være relevante til prosjekter eller andre ting som administrator kan se på eller laste ned. OFFENTLIG DEL I tillegg til grensesnitt for brukere på nettstedet er det mulig for utenforstående å finne generell informasjon om firmaet på forsiden og under “Om oss”. Dette er som nevnt informasjon som kan legges til, endres og slettes av nettstedets administrator. FORSIDE Forsiden til nettstedet er laget for å markedsføre prosjekter som oppdragsgiver arbeider med. Her er det brukt JavaScript som går igjennom alle bilder som administrator har lastet opp til nettsiden og viser bildene i en bildekarusell. Utenforstående personer som besøker nettsiden kan da få en innsikt i aktuelle prosjekter med tekst og bilde. INFORMASJONSSIDE På denne siden vil det vises en overskrift, en tekst og et bilde som administrator har lagt inn. Teksten vil være generell informasjon om firmaet og litt om firmaets erfaring. Det vil også finnes kontaktinformasjon til firmaet. Side 74 av 185 Produktdokumentasjon Webapplikasjon TILBAKEMELDINGER MODALER Når noe skal slettes permanent fra nettstedet vil det komme opp bekreftelsesvinduer i form av modaler som vist på figuren under. Dette er lagt til for å forhindre at administrator tar forhastede beslutninger eller trykker slettknappen ved en feil. Figur 24: Bekreftelsesmodal for sletting TOASTS Ved innlegging, endring, sletting og liknende vil det bli vist toasts øverst til høyre med en passende melding. I tilfellet med sletting vil dette komme fram som en bekreftelse på at handlingen er utført etter det er bekreftet i modalvinduet. Figur 25: Toast-notifikasjoner Side 75 av 185 Produktdokumentasjon Webapplikasjon Dette blir gjort med JavaScripts notifikasjonsbibliotek toaster. Kodesnutten under viser hvordan en slik melding ser ut ved opprettelse av en ny mappe. <script type="text/javascript"> $(document).ready(function () { if ('@ViewBag.message' == "Added") { Command: toastr["success"]("Mappen ble lagt til", "Velly kket!") toastr.options = { "closeButton": false, "debug": false, "newestOnTop": false, "progressBar": false, "positionClass": "toast-top-right", "preventDuplicates": false, "onclick": null, "showDuration": "300", "hideDuration": "1000", "timeOut": "5000", "extendedTimeOut": "1000", "showEasing": "swing", "hideEasing": "linear", "showMethod": "fadeIn", "hideMethod": "fadeOut" } } }); </script> DESIGN FARGEBRUK Designet på nettsiden er hovedsakelig satt opp ved bruk av enkle farger og knapper etter forespørsel fra oppdragsgiver. Bakgrunnsfargen på alle undersider er lys grå, da kontrasten mot sort tekst passer bra. Side 76 av 185 Produktdokumentasjon Webapplikasjon Knappene er gitt farger etter hva som er mest naturlig. “Legg til”-knappene er grønne, “Slett”-knappene er røde og “Tilbake”-knappene er blå. Disse fargene er konsistent brukt på alle undersider og forenkler brukeropplevelsen. Bekreftelsestoastene (toaster) har også farge som tilsvarer handlingen som er blitt utført. Etter noe har blitt slettet, eller når noe har gått feil, altså generelt “negativt ladde” tilbakemeldinger, er toasten rød. Om noe blir lagt til og liknende vil toastmeldingen være på grønn bakgrunn. BOOTSTRAP For generelt sideoppsett har vi brukt Bootstrap. Bootstrap er et front-end rammeverk som inneholder html- og css-baserte designtemplates. Bruk av dette tillater oss til å velge mellom en rekke ferdigdesignede komponenter som kan plasseres hvor vi måtte ønske på siden. Hovedkonseptet med boostrap når det gjelder nettsideoppsett er å dele det opp i rader og kolonner. Dette tilrettelegger for enkel plassering av elementer der man skulle ønske. <div class="row"> <div class="col-xs-10"> FEILHÅNDTERING I dette delkapitlet forklares det hvordan feilhåndtering og tilbakemeldinger gjennomføres på nettløsningen, for eksempel at en person prøver å aksessere sider som han/hun ikke har tilgang til, eller ved registrering av nye elementer og det er skrevet feil på dataene som skal inn i databasen. TRY, CATCH Vi kjører "try, catch" formler på nettstedet som skal ta imot om noe ikke gikk som forventet ved sending av informasjon eller tilgang til sider. I "catch" delen vil vi sende med feilmeldingen til "TempDate" som lagrer feilmeldingen slik at det kan vises på en ny side, og brukeren kan få vite hva som gikk galt. Ved for eksempel at en bruker prøver å aksessere en administrator side vil han/hun bli sendt til en side som forteller at en administrator ikke er Side 77 av 185 Produktdokumentasjon Webapplikasjon logget inn, og får ikke sett denne siden. try { return View(); } catch (Exception error){ TempData["Error"] = "Exception: " + error.ToString(); return RedirectToAction("Error"); } Denne feilhåndteringen er definert over alle funksjonene i kontrolleren, og det brukes andre feilmeldinger ut ifra hvilke funksjoner som kjøres. REGEX Regex gjør at informasjon som lagres inn på nettstedet ikke blir fylt ut med feil informasjon, for eksempel at et telefonnummer ikke blir lagret med bokstaver, eller med flere tall enn åtte. Nettstedet bruker regex gjennom "viewmodels" som brukes på alt av oppretting og endring av informasjon. (For å få en bedre innsikt i dette se brent cd av webapplikasjonen) [EmailAddress(ErrorMessage = "Ugyldig e-postadresse")] Når en administrator skal registrere en ny bruker, er administratoren nødt til å benytte en epost adresse som brukernavn. Dette håndteres av en "viewmodel" som bruker "regex" slik at nettstedet vet hvilke kombinasjoner av ord og tall er lovlig på det gitte feltet, som vist på kodelinjen over. Hvis en ugyldig epost adresse er oppgitt, vil administratoren få et notat under epostadressen om at epostadressen er ugyldig. Ved registrering av passord er det lagt til at passordet må være komplekst. Passordet må inneholde minimum fire tegn, derav det må være minst ett tall og passordet kan kun være 15 tegn langt. Dette gjøres med kodelinjen under. Eksempel med passord innskrevet uten tall. Side 78 av 185 Produktdokumentasjon Webapplikasjon [RegularExpression(@"^(?=.*\d)(?=.*[a-zAZ]).{4,15}$", ErrorMessage = "Innskrevet passord samsvarer ikke med kriteri ene!")] ENHETSTESTING (UNIT-TESTING) I løsningen er det implementert flere kontrollertester som kan brukes dersom det er ønske om å endre eller videreutvikle noe av koden. Her kan det relativt enkelt endres og sjekkes om kontrollermetoden fortsatt returnerer riktig view eller gir riktig redirect. Utvikling av slike automatiserte tester er kjent for å ta en del tid og virke unødvendig, men i senere perioder i Figur 26: UnitTest-prosjektet utviklingsprosessen kan det være mye ressurser å spare ved å ha disse på plass. Vi valgte å ta med utvalgte tester fra AdminController og ReportController i vår løsning. Stort sett tar disse testene for seg sjekking av hvilke views og redirects utvalgte kontroller-metoder skal returnere etter objekter enten blir listet ut eller lagt til. Som vist på figuren ligger disse under UnitTestprosjektet i løsningen. SIKKERHET HASHING AV PASSORD Produktet består i stor grad av lagring av firmaets private dokumenter og filer som kun kan aksesseres av administratorbrukere. I tillegg har personer som har fått opprettet en bruker for seg mulighet til å se dokumenter og filer der administrator har gitt dem rettigheter til det. I denne sammenheng er det viktig med sikkerhet og en av de åpenbare måtene for å oppnå dette er hashing av passord. Under følger metoden vi bruker for å gjøre dette med en SHA512-algoritme. Side 79 av 185 Produktdokumentasjon Webapplikasjon private static string makeHash(string inPassword) { byte[] inData, outData; var algorithm = System.Security.Cryptography.SHA512.Create(); inData = System.Text.Encoding.Default.GetBytes(inPassword); outData = algorithm.ComputeHash(inData); return System.Text.Encoding.Default.GetString(outData); } Ved bruk av denne metoden ved opprettelse av en bruker eller administrator vil passordet som blir skrevet inn kryptert og lagret som en uforståelig rekke tall/tegn/bokstaver i databasen. SESSIONS De fleste sidene på nettstedet krever administratortilgang eller brukertilgang. For å kontrollere denne tilgangen bruker vi sessions. Ved login gjør vi dette slik: [HttpPost] public ActionResult Login(Admin inAdmin, User inUser){ if (ModelState.IsValid){ var dbAdmin = new AdminBLL(); var dbUser = new UserBLL(); var AdminId = dbAdmin.isAdmin(inAdmin); var UserId = dbUser.isUser(inUser); if (AdminId > 0){ Session["LoggedInAdmin"] = true; Session["LoggedInUser"] = false; Session["userId"] = AdminId; ViewBag.Innlogget = true; return RedirectToAction("Index", "Admin"); } else if (UserId > 0){ Session["LoggedInUser"] = true; Session["LoggedInAdmin"] = false; Session["userId"] = UserId; ViewBag.Innlogget = true; Side 80 av 185 Produktdokumentasjon Webapplikasjon return RedirectToAction("UserIndex", "User", new { id = UserId }); } else{ Session["LoggedInAdmin"] = false; Session["LoggedInUser"] = false; ViewBag.Innlogget = false; TempData["LoginFailed"] = "Brukernavn eller passord er feil."; return RedirectToAction("LoginFailed", "Home"); } } else{ return PartialView("Login"); } } Koden over vil sette en session LoggedInAdmin om administratorer logger på eller LoggedInUser dersom en vanlig bruker logger på. Denne session brukes videre i to forskjellige metoder som kontrollerne bruker om views de skal returnere krever en viss tilgang. Kodesnuttene under viser hvordan disse metodene sjekker om de respektive sessions er satt og omdirigere til en feilmeldingsside med tekst satt i TempData dersom noe ikke stemmer. public void IsUserSessionTrue() { if (Session["LoggedInUser"] == null) { TempData["Error"] = "Du er ikke logget inn"; HttpContext.Response.Redirect(Url.Action("Error", "Admin")); } else { var IsUser = Session["LoggedInUser"]; if ((bool)IsUser == false || IsUser == null) { TempData["Error"] = "Du er ikke logget inn"; HttpContext.Response.Redirect(Url.Action("Error", "Admin " )); } } } public void IsAdminSessionTrue() Side 81 av 185 Produktdokumentasjon Webapplikasjon { " if (Session["LoggedInAdmin"] == null) { TempData["Error"] = "Du er ikke logget inn"; HttpContext.Response.Redirect(Url.Action("Error", "Admin")); } else { var IsAdmin = Session["LoggedInAdmin"]; if ((bool)IsAdmin == false || IsAdmin == null) { TempData["Error"] = "Du er ikke logget inn"; HttpContext.Response.Redirect(Url.Action("Error", "Admin )); } } } VIDEREUTVIKLING AV PRODUKTET Webapplikasjonen vår er finjustert for å tilfredsstille vår oppdragsgivers behov. Dette er merkbart ved for eksempel prosjektopprettelser, da det opprettes et bestemt antall brukergrupper og mapper med forhåndsbestemte navn. Ved en eventuell videreutvikling er det mulig å endre dette oppsettet i programkoden, slik at den også kan brukes i andre type prosjekter. Om webapplikasjonen skal gjøres om for å treffe en større målgruppe, vil vi være nødt til å sette opp en installasjonsside som blant annet gir brukeren valg om hvilken server som skal brukes som lagringsplass til nettstedet. Ettersom vårt prosjekt er satt opp slik at systembrukeren både har lagringsplass og webapplikasjon på samme server, vil det ikke fungere dersom det er ønske om å ha lagringsplass lokalt på egen server eller på en annen server enn webapplikasjonen. Det er gjort slik i vårt prosjekt da oppdragsgiver ikke hadde ønske om vedlikehold av en server på egenhånd. Side 82 av 185 Side 83 av 185 Produktdokumentasjon Android-applikasjon PRODUKTDOKUMENTASJON ANDROID-APPLIKASJON FORORD Produktet vi har utviklet er et rapporteringsverktøy for oppdragsgiver. Kapitlene i denne rapporten tar for seg hvordan løsningen er bygd opp kodemessig, og produktets funksjonalitet. Før denne rapporten leses vil det være fordelaktig å ha lest innledningen og presentasjonen av oppgaven. Side 84 av 185 Produktdokumentasjon Android-applikasjon INNHOLD Forord.................................................................................................................................................................... 84 Innhold .................................................................................................................................................................. 85 Database- og Kodestruktur ................................................................................................................................... 87 Er-diagram ......................................................................................................................................................... 87 Aktivitet, adapter og klasser ............................................................................................................................. 87 Adapter og klasser:........................................................................................................................................ 88 Andre Klasser ............................................................................................................................................ 89 Funksjonalitet........................................................................................................................................................ 90 Programflyt ....................................................................................................................................................... 90 Tilbakemeldinger............................................................................................................................................... 91 Feilhåndtering ............................................................................................................................................... 91 Nettverkstilkobling ........................................................................................................................................ 92 Toast .............................................................................................................................................................. 92 Nettverksspørringer .......................................................................................................................................... 92 Tråder ................................................................................................................................................................ 93 AsyncTask ...................................................................................................................................................... 93 Design (layout) .................................................................................................................................................. 94 TextView og EditText ..................................................................................................................................... 94 Knapper ......................................................................................................................................................... 96 ListView ......................................................................................................................................................... 97 Vis Innhold......................................................................................................................................................... 97 Hovedmeny ................................................................................................................................................... 98 Rapport ......................................................................................................................................................... 98 Se rapport/Skjema .................................................................................................................................. 103 Opprette rapport......................................................................................................................................... 103 Behandle/Lukke avviksrapport................................................................................................................ 104 opplastning av rapporter fra php til databasen: ..................................................................................... 105 Opplastning av flere checkboxer og verdier ............................................................................................... 105 Side 85 av 185 Produktdokumentasjon Android-applikasjon Filbehandling ............................................................................................................................................... 108 Bildeopplastning ...................................................................................................................................... 108 Design .............................................................................................................................................................. 110 Bildebruk ..................................................................................................................................................... 110 Farger .......................................................................................................................................................... 110 Feilsøking ............................................................................................................................................................ 110 Verktøy ........................................................................................................................................................ 111 Runtime-feil............................................................................................................................................. 111 Breakpoint og Logcat............................................................................................................................... 111 Viderutvikling ...................................................................................................................................................... 111 Side 86 av 185 Produktdokumentasjon Android-applikasjon DATABASE- OG KODESTRUKTUR ER-DIAGRAM Figur 27: ER-modell AKTIVITET, ADAPTER OG KLASSER Applikasjonen inneholder mange aktiviteter. En aktivitet er en av applikasjonens komponenter, og er det som skaper skjermbildet som brukeren kan interagere med. Aktivitetene arver alle egenskapene til Activity-klassen. Alle aktivitetene er koblet til en layout, som er ansvarlig for brukergrensesnittet. Side 87 av 185 Produktdokumentasjon Android-applikasjon ADAPTER OG KLASSER: Adapter ProsjektAdapter AvviksAdapter MoteAdapter SkadeAdapter TilstandAdapter Klasser ProsjektKlasse AvviksKlasse MoteKlasse SkadeKlasse TilstandKlasse Applikasjonen har fem egendefinerte adaptere og objektklasser. Klassen blir opprettet når dataene mottas. Koden ovenfor illustrerer hvordan man mottar dataene fra et JSON, oppretter en objektklasse og legger informasjon inn i en liste. Adapteret blir brukt til å hente ut listene og sette de inn i et ListView. For å koble en ArrayList og et ListView sammen: Side 88 av 185 Produktdokumentasjon Android-applikasjon Aktiviteter MainSplashScreen RapportMeny AvvikMeny NyAvvikRapport BehandleAvvik LukkingAvvik SeAvvik MoteMeny NyMoteRef SeMote SkadeUlykkeMeny SkaderUlykker Skaderulykkerdel2 SeSkaderapport TilstandFremdriftMeny TilstandRapportNy seTilstand Beskrivelse Første bilde når applikasjonen åpner. Bilde av logo som varer i 5 sekunder. Fire knapper. Bruker velger rapport Listes ut alle avviksrapportene i ListView For innskriving og opplasting av avviksskjema For innskriving og opplasting behandlingsskjemaet til avvik For innskriving og opplasting av lukkingsskjemaet til avvik For å se de innskrivende skjemaet og muligheten for å laste opp bilde Listes ut alle møterapportene i ListView For innskriving og opplasting av møtereferat For å se de innskrivende referatet og mulighet for å laste opp bilde Listes ut alle skaderapportene i Listview For innskriving av skade del1 For innskriving av skade del2, og opplasting av del1 og del2. For å se innlagte rapporter og mulighet for å laste opp bilde Listes ut alle tilstandsrapportene i ListView For innskriving og opplasting av tilstandsrapport For å se de innskrivende rapportene og muligheten for å laste opp bilde ANDRE KLASSER Klasser ConnectionDetector AndroidMultiPartEntity Config JSONParser Beskrivelse Hjelpeklasse for å sjekke om applikasjonen har internett. Hjelpeklasse for progressbar ved opplastning av bilde Hjelpeklasse for nettstedlinken ved opplastning av bilde Hjelpeklasse for http Client, oppkobling mot PHP Side 89 av 185 Produktdokumentasjon Android-applikasjon FUNKSJONALITET PROGRAMFLYT Figur 28: Programflyt Aktivitetsdiagrammet viser hoved flyten gjennom applikasjonen. Dette er tatt med for å gi en dypere forståelse av punktene som blir gjennomgått i de neste avsnittene, og brukes som referanse i videre i produktrapporten. Side 90 av 185 Produktdokumentasjon Android-applikasjon TILBAKEMELDINGER FEILHÅNDTERING Applikasjonen bruker try-catch-feilhåndtering. Hvis et exception blir kastet, vil catch-blokken bli eksekvert, og brukeren vil motta en feilmelding. Applikasjonen bruker hovedsaklig to typer unntak for forskjellige feilsituasjoner: IOException: Kastes dersom det er feil i input og output. JSONException: Kastes der det er feil i JSON. I Feilsituasjoner vil applikasjonen sende ut en Alertdialog, kalt showWrongAlert. Side 91 av 185 Produktdokumentasjon Android-applikasjon NETTVERKSTILKOBLING Applikasjonen sjekker om mobilen er tilkoblet internett opp mot klassen ”ConnectionDetector”, er man oppkoblet til internett så går man videre i applikasjonen. Om ikke så vil applikasjonen sende ut en alertdialog med riktig melding. I ConnectionDetector klassen bruker vi koden: ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); Deretter setter vi inn en “if “ som sjekke om “connectivity” ikke er null. Om den er null så returnerer det false. Det betyr at applikasjonen ikke er koblet til internett. Feilmeldingen som kommer om man ikke er tilkoblet internett blir sendt til alertdialogboksen kalt showWrongAlert med passende melding. Dette blir gjort før man bruker nettverksspørringer. TOAST Ved innleggelse vil det komme en bekreftelse om utførelsen ble fullført eller ikke. Her kommer det en passende melding til brukeren. Eksempel: ”Innleggelsen av rapport er fullført”. NETTVERKSSPØRRINGER All respons er av typen InputStream før det blir parset til JSON. Alle nettverksspørringer blir kjørt i AsyncTask. Med unntak av uthenting av verdier til adapter og klasser, går alle nettverksspørringer mot tjener via JSONParser. Dette er en klasse som inneholder metoden makeHttpRequest, og blir kalt slik: JSONObject json = jsonParser.makeHttpRequest(URL, ”POST”, parms); Side 92 av 185 Produktdokumentasjon Android-applikasjon TRÅDER Applikasjonen blir tildelt en prosess og en tråd av Android-systemet. Denne tråden heter IUtråden. IU-tråden har ansvar for hele applikasjonen, og oppretter alle applikasjonens komponenter (aktiviteter, servicer osv.). IU-tråden har en sikkerhetsfunksjon som går ut på å hindre applikasjonen i å fryse i mer enn fem sekunder. For å forhindre dette, er det nødvendig å kjøre ressurskrevende prosesser i egne tråder. ASYNCTASK Android tilbyr en trådfunksjon for å kunne kjøre asynkrone tråder ved siden av hoved tråden. AsyncTask har følgende metoder som applikasjonen bruker: OnPreExecute DoInBackground OnCancelled OnPostExecute Side 93 av 185 Produktdokumentasjon Android-applikasjon OnPreExecute viser en loading-komponenet, for å illustrere at det arbeides i applikasjonens kulisser. I DoInBackground utføres selve oppgaven, i dette tilfellet hente data fra webserver. I OnPostExecute gjøres endringer av TextViews, og informasjonen vises på skjermen. OnCancelled avbryter DoInBackground-metoden. Enhver spørring mot tjener oppretter en egen AsyncTask. Oppsettet for AsyncTaskene blir brukt i hele applikasjonen ved spørring til tjener. DESIGN (LAYOUT) Layoutene i aktivitetene definerer den visuelle strukturen for brukergrensesnittet. Dette blir gjort i aktivitetens onCreate-metode ved hjelp av koden: setContentView(R.id.activity_main); Hyppigst brukt er RelativeLayout. Det har også blitt brukt LinearLayout der det er behov for flere knapper ved siden av hverandre, da denne tilbyr enklere oppsett for slike elementer. TEXTVIEW OG EDITTEXT Applikasjonen bruker to typer EditText. Den ene har vi ikke har gjort noe med og går på input av tekst på en linje, som for eksempel navn, dato og tall. Den andre EditTexten har en bakgrunn som er satt i mappen drawable, denne type blir brukt ved edittext med flere linjer. Hva slags type input blir bestemt i layouten til edittext. Den defineres med android:InputType=”number”. Om det skal være tekst, byttes ”number” ut med ”text” etc. Side 94 av 185 Produktdokumentasjon Android-applikasjon Applikasjonen har to typer TextView. Den ene går på input av tekst på en linje som navn, dato og tall, og den andre er med bakgrunn definert i mappen drawable. Teksten i TextViewene er tekst som programmereren av applikasjonen har lagt inn, eller tekst som hentes ut fra databasen. Edittext.xml filen som er i mappen drawble ser slik ut: TextView og EditText sin layout blir bestemt av en android:background, som peker til edittext.xml filen. EditText og TextView vil se slik ut når den har satt sin bakgrunn til drawtable-edittext.xml. Figur 29: Bakgrunn til drawable edittext. Side 95 av 185 Produktdokumentasjon Android-applikasjon KNAPPER Figur 30: Rapportmeny Layouten til knappene er bestemt på samme måte som EditText og TextViewene. I layouten blir koden android:background lagt til i knapp.xml som ligger i drawable. Knapp.xml vil eksempelvis se slik ut: Side 96 av 185 Produktdokumentasjon Android-applikasjon LISTVIEW ListViewet har standard layout som på alle ListViews. Med denne layouten så vil alle ListViewene ha en grå/hvit farge med svart tekst. VIS INNHOLD Ved oppstart av applikasjonen vil det bli vist et splashscreen av ikonet til oppdraggivers firma. Etter dette vil en liste av alle prosjekter som ligger i databasen vises. Figur 31: Prosjektliste Side 97 av 185 Produktdokumentasjon Android-applikasjon For å vise innholdet i databasen blir det brukt, som tidligere nevnt, Asynctask. Denne kobler seg til databasen via PHP. Verdiene blir sendt via JSON. Her er en noe forkortet utgave av typiske data: { ”id”:”1”, ”ProsjektName”:”Grøndahls vei 10”, ”Opprettes av”:”Ketil Johansen” }, { ”id”:”2”, ”ProsjektName”:”Aker Brygge Bygg”, ”Opprettes av”:” Ketil” } Responsen inneholder informasjon for alle prosjektene. Med id-nummeret kan brukeren navigere seg videre til Menyen til de enkelte prosjektene. For å vite hvilket prosjekt brukeren har klikket seg innpå, så lagres id og prosjektnavnet i SharedPreference. Prosjektnavnet legges ved for en raskere opplastning av bilder som vi kommer tilbake til senere i produktrapporten. HOVEDMENY I applikasjonens hovedmeny ligger det fire knapper som har blitt gitt en egen layout, som er beskrevet i ”knapper” tidligere i produktrapporten. De fire knappene er linket til fire forskjellige aktiviteter. RAPPORT Side 98 av 185 Produktdokumentasjon Android-applikasjon For å finne riktig rapport til riktig prosjekt ligger prosjektet sin id sammen i databasemodell til rapportene. I actionbaren til disse fire aktivitetene ligger det en “+”-knapp som gir brukeren mulighet til å opprette en ny rapport. Til venstre for logoen i Actionbaren ligger det en pil til venstre. Denne pilen indikerer at man kan gå tilbake til den forrige aktiviteten. Har man klikket på en av rapportene, utføres denne koden: Intent intent = new Intent(ProjectMeny.this, RapportMeny.class); startActivity(intent); Siden visningen og opprettelsen av en rapport har det samme oppsettet, tar vi for oss én rapport for å vise framgangsmåten for å laste opp rapporten og for å se den. Avviksrapporten blir beskrevet, siden dette er den mest avanserte rapporten. Vi kommer også til å gå gjennom de rapportene som er noe annerledes. I alle rapportene er det lagt inn scrollbar i hele aktiviteten og i EditText- og TextView-feltene der det fort kan bli mye tekst. Koden for å legge til scrollbar på EditText: For TextView-feltene må vi først finne ScrollViewet i hele Layouten: Side 99 av 185 Produktdokumentasjon Android-applikasjon Når brukeren prøver og scrolle utenfor TextView-feltet så setter den alle de andre scroll TextViewene til å være false. For å scrolle i TextView-Feltene må vi opprette denne metoden til hvert TextView. Klikker man på en av de fire knappene i rapportmenyen vises en liste med rapportene som er lagt til i databasen. Her er alle layoutene like, og den eneste forskjellen er forskjellig innhold i TextViewet over lista. For å laste opp en rapport kan brukeren gjøre det via applikasjonen eller via hjemmesiden. Det som skjer når en rapport skal lastes inn, er at det startes en metoden som oppretter en Arraylist og et adapter som finner ListView og kobler sammen ListView og adapteret. For å få opp alle rapportene som ligger i databasen så kjører applikasjonen en AsyncTask. httpclient=new DefaultHttpClient(); httppost= new HttpPost(URL); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); nameValuePairs.add(new BasicNameValuePair("idprosjekt", idnrprosjekt)); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); response=httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); Side 100 av 185 Produktdokumentasjon Android-applikasjon I doInBackground-metoden utføres nettverksspørringene. Disse spørringene sender med prosjektets id-nummer via en php-fil. Får man ikke noe tilbake vil det komme en alert-dialog med passende tilbakemelding. Finnes det noe i databasen, vil JSON-response-objektet kjøre gjennom en StringBuilder. StringBuilderen konverterer JSON om til string og sender stringen videre til onPostExecute idet doInBackground er ferdig eksekvert: JSONArray jArray =new JSONArray(result); for(int i=0;i<jArray.length();i++){ JSONObject json_data = jArray.getJSONObject(i); System.out.println(json_data.getInt("ID")); idnr.add(json_data.getInt("ID")); if(i == 0) { if(!List.isEmpty()) List.clear(); } AvviksKlasse av = new AvviksKlasse(json_data.getString("Deviationtype"), json_data.getString("DeviationNr"), json_data.getString("Name"), json_data.getString("Date")); List.add(av); } Her oppretter man Avviksklasse ut i fra de verdiene vi får hentet underveis i for-løkken. Etter opprettelsen av Avviksklassen, legges den inn i en Arraylist. Deretter blir det sendt en NotifyDataSetChanged fra adapteret som gir beskjed om at data har blitt endret og kan oppdateres. Arrayet med id-nummerene lagrer id til hver enkelt rapport, slik at vi kan hente ut riktig rapport senere via listviewet. Dette kommer vi tilbake til. public AvviksKlasse(String atype, String anr, String anavn, String adato) { super(); this.atype = atype; this.anr = anr; this.anavn = anavn; this.adato = adato; } Side 101 av 185 Produktdokumentasjon Android-applikasjon Når det opprettes et nytt avvikobjekt må det følge med riktig parameter. I dette tilfellet er det fire parametre av typen string. public View getView(int position, View convertView, ViewGroup parent) { convertView = ( RelativeLayout ) inflater.inflate( resource, null ); AvviksKlasse ListView = getItem( position ); TextView atype = (TextView) convertView.findViewById(R.id.atype); atype.setText(ListView.getAtype()); } Adapter arver ArrayAdapter<AvviksKlasse>, for å få tak egenskapene til denne klassen. Dette gjør vi ved hjelp av getItem(Position). Adapteret finner deretter riktig TextView og plasserer verdiene på riktig sted i ListViewet ved hjelp av get metodene som ligger i klassen. int idd = 0; for(int i = 0; i < idnr.size(); i++) { (i == position) { idd = idnr.get(i); editor.putInt("idrapport", idd).commit(); } } I ListViewet har brukeren mulighet til å klikke på en gitt rapport for å få all informasjonen fra rapporten. For å løse dette har vi laget en liste som kalles idnr. Her blir id-nummeret til hver rapport lagt inn etter hvert som de blir opprettet i en objektklasse. Metoden onItemClickListener er implementert,og brukes når brukeren klikker på en av rapportene som ligger i listviewet. Da vil applikasjonen gå igjennom idnr-listen i en for-løkke for å finne Side 102 av 185 Produktdokumentasjon Android-applikasjon riktig id til den gitte posisjonen som brukeren har klikket på i ListViewet. Deretter vil iden bli lagret i SharedPreferences og brukeren vil bli sendt videre til aktiviteten SeAvvik, som viser hele rapporten. SE RAPPORT/SKJEMA For å kunne se rapporten trengs id-nummeret som er lagret i SharedPreferences. Her kjøres AsyncTask, og i doInBackground sendes id-nummeret med til JSONParser for deretter å sende det til PHP-filen. JSONResponse-arrayet blir konventert til et JSONObjekt. Deretter går JSONObjektet videre til onPostExecute-metoden. Her får man hente ut informasjonen man trenger med JSONObjektet som er sendt som parameter. Dette er en effektiv og kjapp måte å hente ut informasjon på. TextView og andre visuelle komponenter blir oppdatert fra onPostExecute. OPPRETTE RAPPORT Ved å klikke på + tegnet i actionbaren i rapportmenyen, vil brukeren komme til denne siden. Her ser man edittext-feltene som er beskrevet tidligere i produktrapporten. De fire første feltene er laget i en TableLayout, etterfulgt av en TableRow. Der har man et TextView og en EditText i bredden. De større EditTextene er ikke i TableLayout. Disse justerer seg etter TableLayout som ligger over seg. Om teksten blir en linje mer så justeres det en linje ned. Generelt i alle rapporter så må enkelte EditText-feltene være utfylt, avhengig hva slags rapport brukeren er fyller ut. Opplastningen skjer ved å trykke på lagringsiconet i actionbaren. Det første som skjer ved at man klikker på lagringsikonet oppe i actionbaren, er at applikasjonen sjekker input verdiene stemmer overs med en metode som sjekker om verdien inneholder noen ord. Lengden på verdien kan ikke være 0. Det samme gjelder nummer, men her sjekker den kun lengden siden brukeren ikke har noe mulighet for å legge inn bokstaver eller andre tegn. Side 103 av 185 Produktdokumentasjon Android-applikasjon Det man trenger for å laste opp en rapport er ferdig utfylte EditText- felter, prosjekt-id og linken til nettsiden der php fila ligger. For å få tak i inneholdet som er skrevet inn i inputfeltene, lages det en ny string variabel som henter og lagrer teksten ved hjelp av navnet til EditText sin getText().toString(). nameValuePairs.add(new BasicNameValuePair("Navn", Navn)); Den nye string variabelen lagres så i en List<NameValuePair>. Navnet som står i første stringen ”Navn” er nødt til å samsvare med det som ligger i PHP-filen. Prosjekt-id ligger allerede i SharedPreference, så den hentes direkte derfra og legges til i listen namevaluepair på samme måte som er gjort med Navn. Deretter blir listen sendt videre til PHP-linken via klassen JSONParser. Her blir det bestemt om vi skal bruke POST/GET. BEHANDLE/LUKKE AVVIKSRAPPORT Forskjellen på Avviks rapportene og de tre andre rapportene er at avviksrapporten har flere deler. En del2 som er å behandle avviket og en del 3 som er å avslutte avviket. Denne har vi løst på en effektiv måte ved å lagre id-nummeret til del 1 av rapporten i modellen til del 2 og 3. Med dette så kan man raskt finne ut om avviket er eller ikke er behandlet/lukket. Dette gjøres når avviksrapporten skal vises, her gjøres det en spørring mot de to modellene, Treatment(Behandle) og Closure(Lukket), for å se om id-nummeret til del 1 ligger der. Er rapporten behandlet/lukket, får brukeren tilbake to id’er, én id fra Treatment og én fra Closure. Er kun del 1 fylt ut, må man åpne del 1 og klikke på knappen for behandling av avviket(del 2). I den nye aktiviteten (behandlingen) vil brukeren kunne se alt som er lagt inn tidligere ved hjelp av nettverksspørring og bruk av AsyncTask. if(json.getString(TAG_ID).equals(json.getString(TAG_IDBEHANDLET))) //Avviket er behandlet btnshowBehandle.setVisibility(View.VISIBLE); else //Avviket er ikke behandlet btnIKKEBehandling.setVisibility(View.VISIBLE); Alle knapper i Avviksrapport delen er satt til Gone. Det betyr at om TAG_ID, id-nummeret til del 1, er lik TAG_IDBEHANDLET så er det kun mulig å se den ferdig utfylte del 2. Er idnummerene ulike må man fylle ut del 2 først. Samme metode brukes for del 3. Side 104 av 185 Produktdokumentasjon Android-applikasjon OPPLASTNING AV RAPPORTER FRA PHP TIL DATABASEN: Dataene som mottas av applikasjon gjøres ved: $navn = $_POST[”Navn”]. Når alle dataene er lagret i egne variabler så kopler PHP filen til serveren ved hjelp av koden: $conn = sqlsrv_connect( $serverName, $connectionInfo); Variabelen ServerName er navnet på serveren, ConnectionInfo inneholder brukernavn, passord og databasenavn. Får man ikke kontakt med databasen vil det sendes en tilbakemelding til applikasjonen, og opplastningen avsluttes. Når alle verdiene er hentet fra applikasjonen med $_POST og lagret i variabler, vil PHP fila gå videre og sette verdiene inn i databasen. Om innleggingen feilet vil json_output[”success”] være 0, om opplastningen er fullført vil den være 1. OPPLASTNING AV FLERE CHECKBOXER OG VERDIER Flere rapporter og skjemaer inneholder flere checkboxer der brukeren kan fylle inn tekst ved siden av. Bildet viser en del av møtereferatet, der en TableRow er lagt inn i en TableLayout. Her kommer vi til å gå igjennom framgangsmåten for å laste opp flere lister til en database. Dette er generelt på alle rapportene/møtene og skjemaene. Side 105 av 185 Produktdokumentasjon Android-applikasjon Figur 32: Oppmøte-skjema For å se om personen har vært tilstede, har vi brukt en chechbox der vi får ut en verdi true/false. For input feltet ”Person”, har vi brukt edittext. Her har brukeren mulighet å skrive opp til 500 bokstaver. Om inputverdiene i EditText-feltet er for langt vil det utvide seg vertikalt. TextView og alt annet som er under TableLayouten vil automatisk tilpasse seg tabellraden. Dette er gjort med en linje kode: Android:layout_below=”@id/idnavn”. For at applikasjonen skal skjønne at personen er tilstede eller ikke, må brukeren ha fylt ut noe i personfeltet. Her bruker vi en if-setning og sjekker om det står noe i feltet er utfylt. Er feltet utfylt, sjekkes det om checkboxen er markert eller ikke(true eller false). Når dette er gjort så legges ”tilstede” i en egen liste kalt ChkboxBoolItemList, og personen i en egen liste kalt ChkBoxItemList. Antall personer legges til i ChkBoxItemsAntall, antallet blir satt ved hjelp av inkrement(++). Dette er gjort for å slippe å opprette hver enkel checkbox og personinfo når det skal bli opplastet. Side 106 av 185 Produktdokumentasjon Android-applikasjon I forbindelse med opplastningen så trenger man å få sendt med alle som var tilstede og ikke sammen med riktig personnavn. Her får vi brukt for chkBoxItemsAntall listen som vi laget. For å få dette til så er det brukt en for-løkke. For å få tak i informasjonen som ligger i de to listene, så har vi laget to stringer som er kalt chkboxperson, som inneholder person, og chxbool, som inneholder tilstede. Etterhvert som løkken går, plusses chkboxperson inneholdet som er ”person” med 1. Så den første string parameter som skal sendes med nameValuePairs vil være person0 og det andre parameteret vil vere verdien som ligger i ChkBoxItemsList[0]. Når variabelen øker med en så vil neste nameValuePairs vere person1 og ChkBoxItemsList[1]. Antallet sendest så med til slutt. Dette blir gjort for å slippe å lage variabler, og for at php-filen skal kunne få hentet riktig variabel. PHP-filen får tak i verdien via en for-løkke. Her brukes antallpersoner som blir sendt med fra Android-applikasjonen. Tilstede og person hentes ved de verdiene den er satt til fra forløkken i applikasjonen. Side 107 av 185 Produktdokumentasjon Android-applikasjon Når for-løkken er ferdig så legges de inn i databasen. Det første som skjer her er at PHP-filen sjekker om antallpersoner er over 0, om antallet er over, så settes verdiene inn i databasen ved hjelp av en for-løkke. FILBEHANDLING BILDEOPPLASTNING Alle de fire rapportene skulle ha mulighet til å inneholde bilder. Brukeren har mulighet til å ta et nytt eller laste opp et bilde. Dette gjøres ved å klikke på kameraikonet i actionbaren. For å ta eller laste opp et bilde må brukeren velge en rapport som er ferdig utfylt og lastet opp fra før av, for så å laste opp et bilde. Brukeren har ikke muligheten til å laste opp flere bilder på en gang. Alternativet ble at brukeren kan laste opp ett og ett bilde av gangen. Det er laget to klasser for å få til opplastningen. Første klassen er en MainImage klasse, her velger brukeren om man vil bruke kameraet til å ta et nytt bilde eller å velge et bilde fra minnekortet på telefonen. ImageView imgPreview = (ImageView) findViewById(R.id.imgPreview); BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; final Bitmap bitmap = BitmapFactory.decodeFile(filePath, o2); imgPreview.setImageBitmap(bitmap); Side 108 av 185 Produktdokumentasjon Android-applikasjon Når et nytt bilde er tatt, må bruker velge om bildet skal brukes eller ikke. Denne aktiviteten kalles UploadActivity. Her vil brukeren få sett bildet som er tatt. Bildet blir lastet opp på serveren når brukeren trykker på opplastningsknappen i actionbaren. Når opplastningen er fullført vil filnavnet lagres i databasen. Dette gir brukeren mulighet til å kunne se bildene som er lastes opp. For å kunne se bildene gjøres det på hjemmesiden. Er alt vellykket vil brukeren få opp en alert dialog om at opplastningen er fullført. Deretter gis brukeren muligheten til å laste opp et nytt bilde eller å gå tilbake til menyen. Bildet legges i prosjektet sin Reports mappe, ved hjelp av verdien ”prosjektnavn” som er lagret i SharedPreference. Denne ble lagret i SharedPreference når brukeren valgte et prosjekt i prosjektmenyen, som tidligere nevnt. Responsen fra PHP serveren hentes ut fra JSONObject parameteret i onPostExecute. Her får vi tak i Integer-verdien som er lagret i success-variabelen. Dette blir gjort gjennom en trycatch. Denne vil gi applikasjonen beskjed om opplastningen gikk fint. Er success = 1 ble opplastningen gjennomført. Er den 0 så har det skjedd en feil og response-meldingen applikasjonen får fra en PHP serveren vises i en alertdialog som blir vist til brukeren. Side 109 av 185 Produktdokumentasjon Android-applikasjon DESIGN BILDEBRUK Applikasjonen benytter seg av android sin standard ”holo dark” tema. Istedenfor å bruke ord, så har vi valgt å bruke standardiserte glyphs fra android. Ikoner brukes istedenfor knapper, og fargen som er brukt er hvit . Alle bilde filer er gitt et passende navn som gir informasjon om hvor de blir brukt i applikasjonen. Bildene er lagret i res/drawable. FARGER Figur 33: Liste med brukte bilder Alle farger som er brukt i applikasjonen er lagret i en fil kalt colors.xml som ligger i values-folderen. Siden oppdragsgiver ville ha en enkel bruk av farger i applikasjonen har vi valgt en standard bakgrunn som er svart med hvit tekst. FEILSØKING Denne seksjonen vil beskrive teknikker og metode for å finne, utbedre og rette eventuelle feil og svakheter i kildekoder, og hvordan man skal angripe problemet. Feilsøking i Android er relativt enkelt, så lenge man bruker tid til å se igjennom og lære seg programkoden. Side 110 av 185 Produktdokumentasjon Android-applikasjon VERKTØY Her vil vi beskrive de forskjellige verktøyene som blir brukt for å feilsøke i applikasjonen. RUNTIME-FEIL Hvis applikasjonen stopper under kjøring av en spesifikk aktivitet, avsluttes applikasjonen brått. Slike feil blir kalt uhåndterlige exceptions. Denne typen feil gir ofte en forklarende tilbakemelding slik at programmereren kan rette på det. BREAKPOINT OG LOGCAT Breakpoint er en fin måte å finne feil på, og har blitt hyppig brukt. Med breakpoint kan man stoppe applikasjonen under utførelsen av en oppgave på et bestemt punkt. Hensikten bak dette er å kunne undersøke verdier på et gitt tidspunkt. Dette er en effektiv måte for å se om alle verdiene ligger der de skal og blir sendt riktig. Logcat er og en god måte å finne feil på, denne er vell blitt mest brukt. Hensikten med å bruke Logcat, er at man ikke trenger å stoppe utførelsen av en oppgave. Her går alt i en flyt, og man får opp verdiene til de vi trenger opp i Logcat på Eclipse. VIDERUTVIKLING Ved videreutvikling av applikasjonen vil det være gunstig med en innloggingsside ved oppstart. Hvis dette ble implementert kunne applikasjonen bli gitt til flere personer enn oppdragsgiver og det ville gjort det enklere for oppdragsgiver å holde et prosjekt oppdatert med rapporter. Applikasjonen kunne også blitt implementert ved at en administrator kunne ha sett på mappestrukturen til prosjektene, og kunne lastet ned eller sett på filene til disse mappene. Det er mulig å gjøre dette på en smarttelefon hvis man går på nettstedet, men hadde vært bedre hvis man ikke trengte å logge inn hver gang man skulle se på en fil. Side 111 av 185 Produktdokumentasjon Android-applikasjon Ettersom applikasjonen har vært laget for oppdragsgiver med ønske om en applikasjon med enklest mulig design. Hvis applikasjonen hadde vært tilgjengelige for flere personer ville det vært en prioritet å forbedre designet. Side 112 av 185 Side 113 av 185 Brukerveiledning BRUKERVEILEDNING FORORD I denne brukerveiledningen vil man finne manualer med steg for steg forklaringer og bilder for både webapplikasjonen og Android-applikasjonen. Vi har valgt og ikke å ta med en egen brukerveiledning for den offentlige delen av webapplikasjonen. Denne er selvforklarende og som en hvilken som helst annen hjemmeside i funksjonalitet. Webapplikasjonens brukermanual er delt opp i to deler. Den ene er for en innlogget bruker i systemet. Den andre brukermanualen er for en administrator i systemet. På Androidapplikasjonen er det en brukermanual siden denne er beregnet for en administrator og har derfor alle muligheter. Side 114 av 185 Brukerveiledning INNHOLD Forord.................................................................................................................................................................. 114 Innhold ................................................................................................................................................................ 115 Forord.................................................................................................................................................................. 118 Nettstedskart ...................................................................................................................................................... 118 Logget inn som Bruker ........................................................................................................................................ 119 Innhold ............................................................................................................................................................ 119 Min side ....................................................................................................................................................... 120 Last opp fil ............................................................................................................................................... 121 Pågående prosjekter ............................................................................................................................... 122 brukerens filer ......................................................................................................................................... 123 Logget inn som administrator ............................................................................................................................. 124 Innhold ............................................................................................................................................................ 124 fellesknapper ............................................................................................................................................... 126 Kontrollpanel - Administrasjon ................................................................................................................... 126 prosjekt ................................................................................................................................................... 127 Alle prosjekter - Pågående og fullførte ............................................................................................... 127 Prosjekt del 1 ................................................................................................................................... 129 Brukere ........................................................................................................................................ 130 filer .............................................................................................................................................. 131 Rapport........................................................................................................................................ 134 Prosjekt del 2 ................................................................................................................................... 137 Lag nytt prosjekt .................................................................................................................................. 139 Registrer nytt prosjekt..................................................................................................................... 139 bruker ...................................................................................................................................................... 141 alle brukere ......................................................................................................................................... 141 legg til bruker ...................................................................................................................................... 142 Legg til ..................................................................................................................................................... 142 Legg til bruker til prosjekt ................................................................................................................... 143 Side 115 av 185 Brukerveiledning Kontrollpanel – nettsiden............................................................................................................................ 143 Forside ..................................................................................................................................................... 143 Om oss ..................................................................................................................................................... 144 Kontrollpanel – logging ............................................................................................................................... 145 Logg del 1 ........................................................................................................................................ 145 logg del 2 ......................................................................................................................................... 146 forord .................................................................................................................................................................. 150 applikasjonskart .................................................................................................................................................. 150 Hvordan bruke applikasjonen ............................................................................................................................. 151 Innhold ............................................................................................................................................................ 151 Fellesknapper .................................................................................................................................................. 152 Prosjekt meny ................................................................................................................................................. 152 Rapport meny.............................................................................................................................................. 153 Rapport og skjema visning ...................................................................................................................... 154 Lage nye rapporter .............................................................................................................................. 155 sette dato i rapporter og skjemaer ................................................................................................. 157 Sette inn bilder i rapporter .............................................................................................................. 158 Behandle avviksskjema ................................................................................................................... 159 Avslutt avviksskjema ....................................................................................................................... 160 Side 116 av 185 Brukerveiledning TAKST OG PROSJEKTKONTROLL AS BRUKERMANUAL WEBAPPLIKASJON Figur 34: Forside på nettsiden Side 117 av 185 Brukerveiledning FORORD Dette er en brukermanual både for brukere og administratorer av webapplikasjonen til Takst og Prosjektkontroll AS. Nettstedskart ligger under vil være til stor hjelp med å holde styr på hvor du er og hvilke valg man har fra det stedet du er. Dette gjelder for både bruker og administrator. Hvis du vet hva du leter etter, ta en titt i innholdslisten under den delen av manualen som gjelder for deg, så finner du det med engang. NETTSTEDSKART Figur 35: Nettstedskart Side 118 av 185 Brukerveiledning LOGGET INN SOM BRUKER INNHOLD Logget inn som Bruker ........................................................................................................... 119 Innhold ................................................................................................................................ 119 Min side ........................................................................................................................... 120 Last opp fil .................................................................................................................... 121 Pågående prosjekter .................................................................................................... 122 brukerens filer .............................................................................................................. 123 Side 119 av 185 Brukerveiledning MIN SIDE Figur 36: Brukerens hjemmeområde På figuren over ser du det bildet som møter deg etter at du som bruker har logget deg inn med brukernavn og passord. Figuren under ser du øverste delen som omhandler brukerkontoen din. Her står brukernavnet ditt tydelig slik at du vet at du er logget inn som deg, fullt navn står også på denne siden. Figur 37: Område for opplasting av filer Side 120 av 185 Brukerveiledning LAST OPP FIL På last opp filer, nede til venstre på figuren over, kan du laste opp filer til mappen din. Hvis du trykker på Velg filer knappen blir du sendt videre til opplastningsvinduet. På en Windows maskin vil det se omtrent som figuren under. Figur 38: Velg filer Her kan du velge en eller flere filer fra det stedet du vil laste opp fil fra og deretter trykke “Åpne”-knappen. Ved å gjøre det blir du sendt tilbake til “Min side”, det samme vil skje hvis du benytter “Avbryt”-knappen, men da vil ikke filen følge med. Figur 39: Last opp, bekreftelsesnotifikasjon Side 121 av 185 Brukerveiledning På figuren over til venstre ser du navnet på filen du har valgt og her er det neste steget og trykke på “Last opp”-knappen. Når du har gjort det, kommer det en melding oppe i høyre hjørne som sier at opplastningen var vellykket. Hvis du ikke har internett tilkobling for eksempel, ville det kommet en beskjed om at opplastningen mislyktes. PÅGÅENDE PROSJEKTER Figur 40: Liste over pågående prosjekter Det neste du kommer til på “Min side” er “Pågående prosjekter” som du kan se på figuren over. Her vil alle prosjektene du jobber på til enhver tid ligge. Her får du opp all den viktigste informasjonen om hvert prosjekt. Her det ikke noen valg knapper, men hvis du trykker på et prosjekt vil du bli komme inn til prosjekt mappen. Figur 41: Liste over filer i prosjektet Inne i prosjektmappen kan man se alle de filene som hører til det spesifikke prosjektet. Hvis man trykker på filnavnet som på figuren over er blått, vil filen lastes ned og du kan lagre det lokalt. Her er det en blå “Tilbake”-knapp slik at du alltid kan enkelt gå inn og ut av forskjellige prosjekter. Side 122 av 185 Brukerveiledning BRUKERENS FILER Figur 42: Brukers egen mappe, liste over brukers filer Nederst på “Min side” ligger det en blå arkivmappe, lik den på figuren til venstre over, med brukernavnet ditt på. Trykker du deg inn på denne kommer du inn til alle filene dine. Figuren til høyre viser filene som brukeren har lastet opp. Her ser du også datoen det ble lastet opp. Her finner du den blå “Tilbake”-knappen på samme faste plass som du så i pågående prosjekter. Side 123 av 185 Brukerveiledning LOGGET INN SOM ADMINISTRATOR I denne delen av brukermanualen som omhandler mulighetene for en administrator, er det veldig mange forskjellige knapper som er markert i teksten med understreking. Etter at en knapp er markert ved understrekingen, vil det bli beskrevet funksjonaliteten tilhørende denne rett under. INNHOLD Logget inn som administrator ................................................................................................ 124 Innhold ................................................................................................................................ 124 fellesknapper ................................................................................................................... 126 Kontrollpanel - Administrasjon ........................................................................................ 126 prosjekt......................................................................................................................... 127 Alle prosjekter - Pågående og fullførte ..................................................................... 127 Prosjekt del 1 ......................................................................................................... 129 Brukere ............................................................................................................... 130 filer ..................................................................................................................... 131 Rapport ............................................................................................................... 134 Prosjekt del 2 ......................................................................................................... 137 Lag nytt prosjekt ....................................................................................................... 139 Registrer nytt prosjekt ........................................................................................... 139 bruker ........................................................................................................................... 141 alle brukere ............................................................................................................... 141 legg til bruker ............................................................................................................ 142 Legg til .......................................................................................................................... 142 Legg til bruker til prosjekt ......................................................................................... 143 Kontrollpanel – nettsiden ................................................................................................ 143 Side 124 av 185 Brukerveiledning Forside .......................................................................................................................... 143 Om oss .......................................................................................................................... 144 Kontrollpanel – logging .................................................................................................... 145 Logg del 1 ............................................................................................................... 145 logg del 2................................................................................................................ 146 Side 125 av 185 Brukerveiledning FELLESKNAPPER Tilbake Returnerer til forrige side. Avbryt Avbryter handlingen og sender deg tilbake til kontrollpanelet. Registrer Registrerer det du har gjort og legger det inn i databasen. Slett Sletter det valgte elementet i databasen. Rediger Redigerer informasjonen til det som er valgt i databasen. Endre Endrer informasjon til det valgte elementet. KONTROLLPANEL - ADMINISTRASJON Figur 43: Administrasjonspanel Etter at du som administrator har logget inn, vil du komme til kontrollpanelet for webapplikasjonen. Her har du flere knapper å gå til, og dette skal vi nå gå igjennom. Side 126 av 185 Brukerveiledning PROSJEKT Figur 44: Se alle prosjekter Alle prosjekter Denne knappen lister ut alle prosjekter som er opprettet i databasen, samtidig som den viser prosjektene som er fullført. ALLE PROSJEKTER - PÅGÅENDE OG FULLFØRTE Figur 45: Liste over alle prosjekter Side 127 av 185 Brukerveiledning Legg til prosjekt Her kan du legge til et nytt prosjekt. Vi skal vise hvordan denne siden ser ut, lenger ned på siden. Fullfør Trykkes denne knappen vil et prosjekt legges på "Fullførte prosjekter", altså en historikk for prosjekter slik at du kan beholde gamle filer utenom om å måtte ha prosjektet som pågående. Her vil også alle brukere som var knyttet til prosjektet miste rettigheten sin, og ikke kunne se filene til prosjektet. Angre Denne knappen flytter et prosjekt tilbake til pågående prosjekter, noe som kan gjøres dersom det er blitt gjort en feil. Fjern Her vil prosjektet slettes, akkurat som på “Slett”-knappen. Side 128 av 185 Brukerveiledning PROSJEKT DEL 1 Figur 46: Prosjektets side Trykker du på et prosjekt vil du komme til denne siden, som vier informasjonen til et prosjekt øverst på siden. Nå skal vi gå igjennom alle funksjonene du kan gjøre her inne. Bildet over viser hvordan et prosjekt ser ut. Side 129 av 185 Brukerveiledning BRUKERE Figur 47: Brukervalg på prosjekt Involverte brukere Her vil du komme til en liste over alle brukere som er med i dette prosjektet og hvilke brukergrupper de er lagt på. Bildet under viser hvordan denne siden ser ut. Figur 48: Liste over involverte brukere Legg til bruker i brukergruppe Samme side som du kommer til med knappen "Legg til bruker" som vi forklarte i forrige avsnitt. Under ser du siden du kommer til ved å trykke på begge knappene. Side 130 av 185 Brukerveiledning Figur 49: Legg til bruker i brukergruppe Legg til bruker på prosjekt Her kan du legge til brukere til prosjektet. Siden vises på bildet under. Figur 50: Legge til brukere på et prosjekt Legg til bruker Legger til en bruker på prosjektet. FILER Figur 51: Filvalg i prosjekt Side 131 av 185 Brukerveiledning Alle filer Her vil det komme fram en liste av alle filer som er lastet opp på dette prosjektet. Figur 52: Liste over prosjektets filer Filnavn Trykker du på filnavnet til en fil, vil du laste ned filen. Gi filrettigheter til brukere Her kan du gi brukere rettigheter til filer, denne filen vil da vises i brukerens personlige mappe. Brukes som oftest til kontrakter og personlige filer som andre enn brukeren og administrator ikke skal kunne se. Figur 53: TIldele rettigheter til brukere Side 132 av 185 Brukerveiledning Gi rettigheter til brukergruppe Denne knappen vil sende deg til en side der du kan gi filrettighet til brukergrupper i prosjektet. Dette vil være felles filer for alle brukere som er med i denne brukergruppen. Figur 54: Gi filrettigheter til brukergruppe Last opp Her kan du laste opp filer til prosjektet, disse filene vil vises under "Alle filer"-knappen på forsiden til prosjektet. Figur 55: Last opp filer til prosjekt Side 133 av 185 Brukerveiledning RAPPORT Det opprettes rapporter til et prosjekt, nå skal vi gå igjennom hva du kan gjøre med disse knappene. Figur 56: Rapportmeny Møtereferat Her vil du komme til en side med alle møtereferatene til dette prosjektet. Denne siden vil være lik på alle rapportene, men på avviksskjema er det noen forskjeller, dette kommer vi tilbake til etterpå. Figur 57: Liste over møtereferat Rapport Trykker du på en rapport vil du komme inn til rapporten og kan se informasjonen og bildene som er lagret. Bilde Her kan du laste opp et bilde til en rapport. Side 134 av 185 Brukerveiledning Print Her kommer du til utskriftsversjonen av rapporten. Skaderapport Denne knappen sender deg til en side med alle skaderapporter til prosjektet, her vil knappene gjøre det samme som på møtereferat. Tilstand-/framdriftsrapport Her vil du komme til alle Tilstand-/framdriftsrapporter på prosjektet, her vil knappene gjøre det samme som på de forrige rapportene. Avviksskjema Her kan du se alle avviksskjemaene til prosjektet, knappene vil gjøre det samme som de forrige rapportene. Avviksskjema består av tre deler, og her forklarer vi noen av forskjellene mellom disse. Figur 58: Liste med avviksskjemaer Behandle rapport Her kan du behandle avviket og siden vises på bildet under. Side 135 av 185 Brukerveiledning Figur 59: Behandling av avviksskjema Side 136 av 185 Brukerveiledning Avslutte rapport Her kan du avslutte avviket og siden vises på bildet under. Figur 60: Lukking av avviksskjema PROSJEKT DEL 2 Denne siden ligger under prosjekt del 1, og her er mappesystemet til alle brukergruppene til prosjektet. Videre skal vi gå igjennom alt du kan gjøre her. Figur 61: Mappevalg Ny mappe Her kan du registrere en ny mappe, hvis denne knappen trykkes på forsiden, vil du opprette en ny overordnet mappe, og denne kan det ikke lastes opp filer til. Inne i den nye mappen du har laget vil du kunne opprette nye mapper som også vil opprette en mappe og en brukergruppe på dette prosjektet med samme navn, og her kan du laste opp filer. Side 137 av 185 Brukerveiledning Figur 62: Opprette ny mappe Mappe (for eksempel Bygg) Trykker du på mappen “Bygg” kommer du inn til alle brukergruppene som ligger under mappen “Bygg”. Bildet under viser hvordan denne siden ser ut. Figur 63: Undermappene til "Bygg"-mappen Tannhjul Trykker du på tannhjulet får du opp valgene om å slette og endre mappen. Ny mappe Oppretter en mappe under bygg mappen og lager samtidig en brukergruppe til denne mappen. Mappe (for eksempel Kunder) Her vil du kunne se alle filer som er lagt på brukergruppen "Kunder", disser er de samme filene som en kunde vil ha på sin side og brukeren kan laste disse ned. Side 138 av 185 Brukerveiledning Figur 64: Filer i mappen "Kunder" Slett Sletter rettigheten til en brukergruppe for den gitte filen. LAG NYTT PROSJEKT Her kan du opprette et nytt prosjekt. Figur 65: Prosjektvalg Lag nytt prosjekt Trykker du på lag nytt prosjekt, kommer du til siden under. REGISTRER NYTT PROSJEKT Side 139 av 185 Brukerveiledning Figur 66: Registrere nytt prosjekt Velg dato Her kommer det en kalender, som gjør det enkelt for deg å velge datoen for prosjektet. Figur 67: Date picker. Velg dato Side 140 av 185 Brukerveiledning BRUKER Figur 68: Brukervalg Alle brukere Trykkes denne knappen vil du komme til en liste av alle registrerte brukere i systemet. ALLE BRUKERE Figur 69: Liste over alle brukere Side 141 av 185 Brukerveiledning Bruker Her kan du også trykke på brukerens navn og komme til brukerens side. LEGG TIL BRUKER Legg til bruker Her kan du legge til en ny bruker til systemet. Brukeren registreres med brukernavn som en epostadresse og passord med en blanding av bokstaver og tall, dette blir brukt som innloggingsinformasjon for brukeren for å få tilgang til systemet. Figur 70: Registrer ny bruker LEGG TIL Figur 71: Legge til bruker på prosjekt Side 142 av 185 Brukerveiledning Legg til bruker på prosjekt Her kan du gi en bruker rettighet til et prosjekt, dette prosjektet vil da listes ut på brukerens side. LEGG TIL BRUKER TIL PROSJEKT Figur 72: Legge til bruker på prosjekt Her får du en dropdown-liste av alle brukerne i systemet og kan legge de til i et prosjekt via en annen dropdown-liste. Registrer Gir brukeren rettighet til prosjektet. KONTROLLPANEL – NETTSIDEN Figur 73: Nettsidekontroll (CMS) FORSIDE Side 143 av 185 Brukerveiledning Endre forsiden Her kan du endre informasjonen som vises på forsiden. Du kan endre tittelen og innholdet, samtidig som du kan laste opp bilder som vil vises i en bildekarusell. Figur 74: Endre forside (CMS) Lagre Lagrer informasjonen som er skrevet inn i tekstboksen. Last opp bilde Her kan du velge et bilde som skal lastes opp i bildekarusellen på forsiden. Slett bilde Sletter et bilde som ligger i bildekarusellen. OM OSS Her kan du endre informasjonen som ligger på "Om oss", denne siden ser helt lik ut som "Endre forsiden". Side 144 av 185 Brukerveiledning KONTROLLPANEL – LOGGING Figur 75: Vis databaselogg LOGG DEL 1 Logg Her vil du komme til en liste som inneholder alt av endringer i databasen. Her vil det også stå hvilken administrator eller bruker som har gjort endringene og når. Side 145 av 185 Brukerveiledning Figur 76: Databaselogg del 1 Tøm logg Her kan du slette alt av logg som ligger i databasen. LOGG DEL 2 Figur 77: Databaselogg del 2 Side 146 av 185 Brukerveiledning Bla gjennom sider Loggen viser 15 databaserader på hver side. Ved å trykke på tallene nederst på siden kan du se de 15 neste radene. Side 147 av 185 Brukerveiledning Side 148 av 185 Brukerveiledning TAKST OG PROSJEKTKONTROLL AS BRUKERMANUAL ANDROID-APPLIKASJON Side 149 av 185 Brukerveiledning FORORD Dette er en brukermanual både for Android-applikasjonen til Takst og Prosjektkontroll AS. Et applikasjonskart ligger under og kan være til stor hjelp med å holde styr på hvor du er og hvilke valg man har fra det stedet du er. Oppbygningen er ganske så lik gjennom applikasjonen, men det er variasjon i valgmuligheter. Hvis du vet hva du leter etter, ta en titt i innholdslisten under den delen av manualen som gjelder for det, så finner du det med engang. APPLIKASJONSKART Figur 78: Applikasjonskart Side 150 av 185 Brukerveiledning HVORDAN BRUKE APPLIKASJONEN I denne delen av brukermanualen som omhandler mulighetene for brukeren i applikasjonen, er det flere knapper som går igjen flere steder. Disse er forklart i starten av manualen. Andre knapper er utdypet og markert at det er en knapp med understreking. Etter at en knapp er markert ved understrekingen, vil det bli beskrevet funksjonaliteten tilhørende denne rett under. INNHOLD Forord.................................................................................................................................................................. 150 Applikasjonskart .................................................................................................................................................. 150 Hvordan bruke applikasjonen ............................................................................................................................. 151 Innhold ............................................................................................................................................................ 151 Fellesknapper .................................................................................................................................................. 152 Prosjekt meny ................................................................................................................................................. 152 Rapport meny.............................................................................................................................................. 153 Rapport og skjema visning ...................................................................................................................... 154 Lage nye rapporter .............................................................................................................................. 155 sette dato i rapporter og skjemaer ................................................................................................. 157 Sette inn bilder i rapporter .............................................................................................................. 158 Behandle avviksskjema ................................................................................................................... 159 Avslutt avviksskjema ....................................................................................................................... 160 Side 151 av 185 Brukerveiledning FELLESKNAPPER Tilbake Returnerer til forrige side ved å trykke ved siden av bilde oppe i venstre hjørne. Figur 79: Tilbake + tegn øverst til høyre Åpner en rapport slik at du kan fylle den ut. Figur 80: Legg til Avhakning øverst til høyre Registrerer og lagrer det som er fylt inn. Figur 81: Avhakning PROSJEKT MENY Figur 82: Liste med prosjekt Side 152 av 185 Brukerveiledning Skjermbildet over viser hvordan alle prosjekter listes ut. Dette er startsiden på applikasjonen og stedet du kommer til etter å ha startet applikasjonen og oppstartslogoen har forsvunnet. Her trykker du på det prosjektet du skal skrive en rapport under. RAPPORT MENY Figur 83: Meny for rapporter Trykker du på et prosjekt vil du komme til denne siden, som gir fire knapper med forskjellige valg. Disse linker deg videre til de respektive skjemaene og rapportene innenfor det prosjektet du gikk inn på i forrige steg. Side 153 av 185 Brukerveiledning RAPPORT OG SKJEMA VISNING Figur 84: Liste over avviksskjema Bildet over viser hvordan de eksisterende rapportene, i dette tilfellet avviksskjemaer, vises i en liste. Øverst til høyre er “+”-knappen som ble beskrevet først i denne manualen. Trykker du på denne starter du et nytt skjema eller ny rapport. Denne visningen og oppsettet som er vist over, vil være likt satt opp på alle de forskjellige rapportene. Side 154 av 185 Brukerveiledning LAGE NYE RAPPORTER Avhengig av hvilket skjema eller rapport du skal fylle ut er det gjerne noen forskjeller. Her vil de feltene som er spesielle for den enkelte rapport ble utbrodert. På avviksskjema er det litt spesielt siden denne både har en behandlingsdel og en avslutningsdel. Hvordan dette fungerer er forklart litt lenger ned. Figur 85: Utfylling av avviksskjema og møtereferat Inne på utfyllingen av avviksskjemaet til venstre er det ingen spesielle felt, men vanlige felt for utfylling av den teksten feltet hører til. Møtereferatet er litt spesielt, da du skal kunne fylle inn alle som er innkalte og deretter huke på venstre side ved hvert navn om den enkelte var tilstede. Side 155 av 185 Brukerveiledning Figur 86: Utfylling av tilstands- og skaderapport En del av tilstandsrapporten, som er vist på bildet til venstre, er et skjema som må fylles ut ved å nummerere poster med bygningsdelen det gjelder. Skaderapporten er litt spesiell fordi den er delt opp i 2 sider. En skaderapport har flere felter det kan skrives mye tekst på, så her brukes pilen oppe i høyre hjørne til å gå til del 2 av skaderapporten. Side 156 av 185 Brukerveiledning SETTE DATO I RAPPORTER OG SKJEMAER Figur 87: Date picker. Velg dato Feltene som har med velding av dago å gjøre er lik på alle steder i applikasjonen. Når du trykker på datoen, som er satt til dagens dato automatisk, kommer det opp en dato-velger som på bildet over. “Bruk” trykker du når du har funnet datoen du skal bruke, mens “Avbryt” brukes når du vil gå tilbake til rapportutfyllingen. Side 157 av 185 Brukerveiledning SETTE INN BILDER I RAPPORTER Figur 88: Legg inn bilde i rapport Etter en rapport er fylt ut kan du gå inn igjen på en utfylt rapport og legge til bilder. Dette gjelder alle rapporter og skjemaer. For å gjøre dette trykker du på kamera-ikonet oppe i høyre hjørne. Når du har trykket på dette ikonet får du opp to valg. Det ene er om du vil hente et bilde fra galleriet på telefonen din og det andre om du vil ta et nytt bilde med kameraet. Når du har valgt en av disse to kommer du til bildet til høyre. Her kan du enten angre og gå tilbake, eller laste det opp til den rapporten du gikk inn på ved å trykke på “Last opp til server”. Side 158 av 185 Brukerveiledning BEHANDLE AVVIKSSKJEMA Figur 89: Etterbehandling av avviksskjemaene Når et avviksskjema er lagt inn og du går inn for å se på det, vil du få valg om å behandle og avslutte avviket nederst i visningen av rapporten slik som på bildet over. Figur 90: Behandling av avviksskjema Trykker du på “Behandle avviket” blir du sendt til siden som er vist på bildet over. Det å behandle gjelder kun for avviksskjemaet og ikke de andre rapportene. Side 159 av 185 Brukerveiledning AVSLUTT AVVIKSSKJEMA Figur 91: Lukking av avvik På bildet over vises det som kommer hvis du trykker “Avslutt avviket”-knappen nederst i et avvik. Her gjøres siste utfyllinger før man avslutter og laste opp ved å bruke avhakningen oppe i høyre hjørne. Side 160 av 185 Side 161 av 185 Vedlegg VEDLEGG INNHOLD Vedlegg 1 - Testrapport Vedlegg 2 - Ordliste Vedlegg 3 - Kilder Vedlegg 4 - Tilbakemelding Vedlegg 5 - Kontrakt Side 162 av 185 Vedlegg 1 VEDLEGG 1 – TESTRAPPORT FORORD I dette kapittelet skal vi gå igjennom hvordan vi har håndtert brukertestinger gjennom utviklingen av applikasjonene. Vi vil også beskrive enhetstester og brukte verktøy. Side 163 av 185 Vedlegg 1 INNHOLD Forord.................................................................................................................................................................. 163 Innhold ................................................................................................................................................................ 164 Mål for testing ..................................................................................................................................................... 165 Test av webapplikasjon ....................................................................................................................................... 165 Verktøy brukt i testing .................................................................................................................................... 165 Google Chrome ........................................................................................................................................... 165 Mozilla Firefox ............................................................................................................................................. 165 Internet Explorer(IE).................................................................................................................................... 166 Test Tools i Visual Studio ............................................................................................................................. 166 Brukertesting ................................................................................................................................................... 166 Enhetstesting .................................................................................................................................................. 168 Konklusjon ....................................................................................................................................................... 168 Test av Android-applikasjon ................................................................................................................................ 169 Verktøy brukt i testing .................................................................................................................................... 169 LogCat.......................................................................................................................................................... 169 Samsung Galaxy S3 ...................................................................................................................................... 169 Brukertesting ................................................................................................................................................... 169 Konklusjon ....................................................................................................................................................... 170 Side 164 av 185 Vedlegg 1 MÅL FOR TESTING Et av målene med testingen er å unngå at vi ender opp med et produkt som er lite brukervennlig. Et annet mål er å teste metodene som blir brukt i løsningen. Det er enklere for de som har utviklet applikasjonen å få riktige tilbakemeldinger ved bruk av funksjonaliteten på webapplikasjonen, i forhold til en som aldri har brukt verktøyet. Ettersom applikasjonen skal lagre kontrakter mellom daglig leder og aktørene er det viktig at andre brukere ikke har tilgang til disse filene. Derfor er det viktig å drive testing. TEST AV WEBAPPLIKASJON VERKTØY BRUKT I TESTING Siden vi utvikler en webapplikasjon har vi brukt forskjellige nettlesere for å se om løsninger er lik på de forskjellige. GOOGLE CHROME Vi har skrevet nettsiden slik at den er mest kompatibel med Google Chrome. Det er nettleseren vi har brukt til å teste med hele veien, og er den nettleseren vi anbefaler å bruke for webapplikasjonen. MOZILLA FIREFOX Vi har vært innom Mozilla Firefox for å se om webapplikasjonen var brukbar for denne nettleseren. Vi fant fort ut at det ble noen forskjeller ved bruk av andre nettlesere, selvom funksjonaliteten til nettsiden kunne brukes i Mozilla firefox. Side 165 av 185 Vedlegg 1 INTERNET EXPLORER(IE) Nettløsningen fungerte bra sammen med IE, men forskjellen på oppløsningen i denne nettleseren og Google Chrome er annerledes. TEST TOOLS I VISUAL STUDIO Test Tools er Microsofts rammeverk for enhetstesting. Dette er brukt for å lage alle enhetstestene til webapplikasjonen. BRUKERTESTING Vi har kjørt brukertestinger gjennom oppdragsgiver ved at vi gjorde webapplikasjonen tilgjengelig så fort som mulig på internett, noe som gjorde at han kunne teste funksjonaliteten gjennom hele utviklingen. Vi fikk mye tilbakemeldinger på epost om hvordan ting fungerte og ikke fungerte. Det vi har gjort mest brukertesting og endringer på er rapportene i webapplikasjonen. Rapportene ble gitt til oss i papirformat og vi utviklet en side som vi tenkte ville være enkelt for oppdragsgiver å forstå, men etter noe testing fra han sin side fant vi ut at han ønsket rapportene så lik som papirutgavene som mulig. Det var derfor viktig med mange tester fra oppdragsgiver ettersom det hovedsaklig er han som skal bruke verktøyet. Side 166 av 185 Vedlegg 1 Funksjonalitet Logge inn Lage, endre, fullføre og slette prosjekt Lage, endre og slette bruker Lage, endre og slette mappe Lage, endre og slette rapporter. Legge til bilder på rapporter Laste opp filer til prosjekt og brukermappe Test Logge inn med brukernavn. Skal fungere for både bruker og administrator. Administrator skal kunne lage, endre, fullføre og slette et prosjekt. Administrator skal kunne lage, endre og slette en bruker. Administrator skal kunne lage, endre og slette en mappe. Administrator skal kunne lage, endre, slette, vise og printe alle typer rapporter. Administrator skal kunne legge til bilder på alle typer rapporter. Administrator skal kunne laste opp filer til et prosjekt, eller til mappen til en bruker. Gi filrettigheter til brukere og Administrator skal kunne gi brukergrupper filrettigheter både til brukere og brukermapper. Laste opp fil til personlig Bruker skal kunne laste opp mappe filer til sin personlige mappe som han og administrator skal kunne se. Endre innhold på forside Administrator skal kunne endre forsidens innhold. Dvs. tekst og bilder. Endre innhold i “Om oss” Administrator skal kunne endre innhold på siden “Om oss”. Dvs. tekst og bilde. Se og slette logg Administrator skal kunne se og slette loggen. Resultat Ok Ok Ok Ok Omfattende test hvor noe kan ha blitt glemt å teste. Ellers Ok Ok Ok Ok Ok Ok Ok Ok Side 167 av 185 Vedlegg 1 ENHETSTESTING I løsningen er det implementert flere kontrollertester som kan brukes dersom det er ønske om å endre eller videreutvikle noe av koden. Her kan det relativt enkelt endres og sjekkes om kontrollermetoden fortsatt returnerer riktig view eller gir riktig redirect. Utvikling av slike automatiserte tester er kjent for å ta en del tid og virke unødvendig, men i senere perioder i utviklingsprosessen kan det være mye ressurser å spare ved å ha disse på plass. Vi valgte å teste utvalgte metoder fra AdminController og ReportController i vår løsning. Stort sett tar disse testene for seg sjekking av hvilke views og redirects utvalgte kontroller-metoder skal returnere etter objekter enten blir listet ut eller lagt til. Som vist på figuren ligger disse under UnitTest-prosjektet i løsningen. Figur 92: Liste over enhetstester KONKLUSJON Ved at vi lastet opp nettstedet tidlig til oppdragsgiver, har vi fått mye testing på nettstedet og fått til slutt et produkt som oppdragsgiver ønsket. Dette har også gjort det enklere for oss å utvikle webløsningen ved at vi hele tiden kan få tilbakemeldinger. Side 168 av 185 Vedlegg 1 TEST AV ANDROID-APPLIKASJON VERKTØY BRUKT I TESTING LOGCAT Testing og feilsøking av Android-applikasjonen har foregått gjennom Logcat. Logcat er et program i Android SDK, og tar hånd om alt av feilsøk og breakpoints. SAMSUNG GALAXY S3 Smarttelefon fra Samsung med 4,8" skjerm. Brukt til testing av applikasjonen. BRUKERTESTING Brukertestingen har blitt utført på oppdragsgiver gjennom møtene med han. Under det første møtet vi hadde, viste oppdragsgiver oss en applikasjon han ønsket at Androidapplikasjonen skulle ligne på. Dette gjorde utformingen enklere. Vi har derfor stort sett fått positive tilbakemeldinger på designvalg. Vi fikk gode tilbakemeldinger underveis på hva han likte og hva han ville ha forbedret. Applikasjonen er dessutenprivat og ikke nedlastbart for andre. Det som ble testet mest var registrering av rapportene i applikasjonen. Rapportene ble gitt til oss i papirform og vi måtte utvikle en rapporteringsverktøy som oppdragsgiver kunne gjenkjenne. Etter noe testing fra oppdragsgivers side fant vi ut at vi skulle utforme rapportene tilnærmet lik papirutgaven, dersom det lot seg gjøre. Det ble en utfordring å få rapportene inn på en så liten skjerm. Det var derfor viktig med mange tester fra oppdragsgiver ettersom det han som skal bruke applikasjonen. Side 169 av 185 Vedlegg 1 Funksjonalitet Navigering Lage rapporter. Se rapporter. Legge til bilder på rapporter Test Brukeren skal kunne navigere knirkefritt mellom alle skjermene Brukeren skal kunne lage alle typer rapporter. Brukeren skal kunne se rapporter Brukeren skal kunne legge til bilder på alle typer rapporter. Resultat Ok Omfattende test hvor noe kan ha blitt glemt å teste. Hadde noe problemer med æøå som sendes over til PHP. Ellers Ok Ok Ok, problem med opplastning av bilder til server. Ellers ok KONKLUSJON Ved at vi fikk prøvd applikasjonen tidlig med oppdragsgiver, har vi fått mye testing på applikasjonen og fått til slutt et produkt som oppdragsgiver ønsket. Dette har også gjort det enklere for oss å utvikle en applikasjon ved at vi hele tiden kan få tilbakemeldinger. Side 170 av 185 Vedlegg Side 171 av 185 Vedlegg 2 VEDLEGG 2 - ORDLISTE A Asynctask: Er en trådfunksjon som fordeler arbeidet ved opplastning til Databasen. B Back-end: Kalles ofte hjernen av et program. Back-end-utviklingen er delen av applikasjonen som aldri er synlig for brukerene. Bootstrap: Bootstrap er et front-end rammeverk som inneholder html- og css-baserte designtemplates C CMS: Content Management System E Empirisk prosesskontroll: Skaffe erfaringer og bygge opp kunnskap for å komme nærmere en løsning på problemet. Entity framework: Entity Framework ( EF ) er et åpent kildekode rammeverk med ORM (object-relational mapping) for .NET. ER: Entity Relationship. Viser relasjoner i en relasjonsdatabase. Side 172 av 185 Vedlegg 2 F Fremdriftsplan: En fremdriftsplan er en oversikt over det arbeidet man planlegger å utføre, altså en kort og skjematisk beskrivelse over de forskjellige arbeidsoppgaver. Front-end: Er utviklingen av elementer på et nettsted etc. som brukere kan se og interagere med. H HiOA: Høgskolen i Oslo og Akershus I Implementere: Gjøre det som er nødvendig for å få program eller funksjon til å virke. IDE: Står for Integrated Development Environment . På norsk er det et integrert utviklingsmiljø som hjelper utviklere med å skape og feilsøke (debugge) kode. K Klient: En klient er et dataprogram som kjører lokalt hos brukeren og som kan kobles opp mot en tjener via et nettverk slik at tjeneren bidrar til funksjonaliteten. Side 173 av 185 Vedlegg 2 L Learning by doing: Å lære ved å gjøre. Når man er nært og aktivt knyttet til læringsstoffet gjennom aktivitet. ListView: Et ListView er en visuell komponenet som presenterer informasjon i en skrollbar liste. M MVC: Model-View-Controller O ORM: Object-relational mapping er en teknikk for å konvertere data mellom ukompatible typesystemer i objektorienterte programmeringsspråk. P Pair programming: En teknikk hvor to programmerere sitter sammen og programmerer. Den ene skriver kode(driver), og den andre observerer og kommer med innspill(observer). PartialView: View som fungere som et tilleggsview til ordinære views. (Ofte med andre modeller). R Risikoplan: Risikoplan er en oversikt over ting som kan gå galt og ting som gjør at man bruker lengre tid en planlagt. Den inneholder også hvordan man skal forhindre at risikoene ødelegger for prosjektet. Side 174 av 185 Vedlegg 2 S Scrum: Smidig utviklingsmetode. Sprint: Periode på 1-4 uker hvor en mengde definerte funksjoner skal ferdigstilles. T To-do list: En liste over ting som skal gjøres. Tjener: En tjener, også kalt en server, er en programvare som tilbyr en eller flere tjenester til andre datamaskiner (klienter) over et datanettverk. U User story: En beskrivelse fra en sluttbrukers ståsted over hva han/hun må kunne gjøre for å gjøre jobben sin. Ofte formulert slik; “Som en [sluttbrukers rolle], må jeg kunne [ønsket handling] slik at [resultat]. Side 175 av 185 Vedlegg Side 176 av 185 Vedlegg 3 VEDLEGG 3 – KILDER Android Developer. Activity. Hentet 19.05.15 fra http://developer.android.com/reference/android/app/Activity.html Android Developer. AlertDialog. Hentet 19.05.15 fra http://developer.android.com/reference/android/app/AlertDialog.html Android Developer. AsyncTask. Hentet 19.05.15 fra http://developer.android.com/reference/android/os/AsyncTask.html Android Developer. ListView. Hentet 19.05.15 fra http://developer.android.com/guide/topics/ui/layout/listview.html Android Developer. SharedPreferences. Hentet 19.05.15 fra http://developer.android.com/reference/android/content/SharedPreferences.html ASP.NET. Creating Unit Tests for ASP.NET MVC Applications. Hentet 14.05.15 fra http://www.asp.net/mvc/overview/older-versions-1/unit-testing/creating-unit-testsfor-asp-net-mvc-applications-cs Bootstrap. Components of Bootstrap. Hentet 23.02.15 fra http://getbootstrap.com/components/ Entity Framework. Hentet 21.04.15 fra http://en.wikipedia.org/wiki/Entity_Framework Høgskolen i Oslo og Akershus. (udatert). Dokumentasjonsstandard. Hentet 12.05.15 fra http://www.cs.hioa.no/data/bachelorprosjekt/dokumentasjonsstandard-2.pdf MSDN Magazine. Pros and Cons of Data Transfer Objects. Hentet 19.05.15 fra https://msdn.microsoft.com/en-us/magazine/ee236638.aspx#id0080028 Scrum Methodology. Scrum Methodology, introduction etc. Hentet 19.05.15 fra http://scrummethodology.com/ Side 177 av 185 Vedlegg 3 Scrumblr. Scrumblr by Aliasaria (Scrum board). Hentet 14.05.15 fra http://scrumblr.ca/ Wikipedia. Content Management System (CMS). Hentet 24.05.15 fra http://en.wikipedia.org/wiki/Content_management_system Side 178 av 185 Vedlegg Side 179 av 185 Vedlegg 4 VEDLEGG 4 – TILBAKEMELDING FRA OPPDRAGSGIVER Side 180 av 185 Vedlegg 4 Side 181 av 185 Vedlegg 5 VEDLEGG 5 – KONTRAKT Side 182 av 185 Vedlegg 5 Side 183 av 185 Vedlegg 5 Side 184 av 185 Side 185 av 185
© Copyright 2024