示例#1
0
        public async Task <List <Stopp> > FinnMuligeSluttStopp(StoppModel sluttStopp)
        {
            try
            {
                Stopp stopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == sluttStopp.Navn);

                List <Ruter> ruter = await _hjelp.FinnRuteneTilStopp(stopp);

                List <Stopp> stoppListe = new List <Stopp>();
                foreach (Ruter rute in ruter)
                {
                    int stoppNummer = await _hjelp.FinnStoppNummer(stopp, rute);

                    List <Stopp> tempListe = await _db.RuteStopp
                                             .Where(rs => rs.StoppNummer > stoppNummer && rs.Rute == rute)
                                             .Select(rs => rs.Stopp).ToListAsync();

                    stoppListe.AddRange(tempListe);
                }

                return(stoppListe);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(null);
            }
        }
示例#2
0
        public async Task <bool> OppdaterStoppnavn(Stopp innStopp)
        {
            if (innStopp == null)
            {
                _log.LogInformation("Det er ikke noe stoppobjekt å endre navn på!");
                return(false);
            }
            Stopp stopp = await _db.Stopp.FindAsync(innStopp.Id);

            stopp.Navn = innStopp.Navn;
            await _db.SaveChangesAsync();

            return(true);
        }
示例#3
0
        /* Hjelpemetode som tar inn et Stopp-objekt og returnerer en
         * liste med ruter som innholder stoppet */

        public async Task <List <Ruter> > FinnRuteneTilStopp(Stopp stopp)
        {
            try
            {
                return(await _db.RuteStopp
                       .Where(rs => rs.Stopp == stopp)
                       .Select(rs => rs.Rute)
                       .ToListAsync());
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(null);
            }
        }
示例#4
0
        public async Task HentEtStopp_IkkeTilgang()
        {
            // Arrange
            Stopp forventetStopp = new Stopp {
                Id = 1, Navn = "Oslo"
            };

            mockRepo.Setup(b => b.HentEtStopp(forventetStopp.Id)).ReturnsAsync(forventetStopp);
            MockSession(_ikkeInnlogget);

            // Act
            var resultat = await stoppController.HentEtStopp(forventetStopp.Id) as UnauthorizedObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.Unauthorized, resultat.StatusCode);
        }
示例#5
0
        public async Task HentEtStopp_Feil()
        {
            // Arrange
            Stopp forventetStopp = new Stopp {
                Id = 1, Navn = "Oslo"
            };

            mockRepo.Setup(b => b.HentEtStopp(forventetStopp.Id)).ReturnsAsync(() => null);
            MockSession(_innlogget);
            // Act
            var resultat = await stoppController.HentEtStopp(forventetStopp.Id) as NotFoundObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.NotFound, resultat.StatusCode);
            Assert.Equal("Stoppet ble ikke funnet", resultat.Value);
        }
示例#6
0
        public async Task OppdaterStoppnavn_IkkeTilgang()
        {
            //arrange
            Stopp stopp = new Stopp {
                Id = 1, Navn = "Oslo"
            };

            mockRepo.Setup(s => s.OppdaterStoppnavn(stopp)).ReturnsAsync(true);

            MockSession(_ikkeInnlogget);
            //act
            var resultat = await stoppController.OppdaterStoppnavn(stopp) as UnauthorizedObjectResult;

            //assert
            Assert.Equal((int)HttpStatusCode.Unauthorized, resultat.StatusCode);
        }
示例#7
0
        public async Task OppdaterStoppnavn_Regex()
        {
            //arrange
            Stopp stopp = new Stopp {
                Id = 1, Navn = "Ox"
            };

            mockRepo.Setup(s => s.OppdaterStoppnavn(stopp)).ReturnsAsync(true);
            MockSession(_innlogget);
            stoppController.ModelState.AddModelError("Navn", "Feil i inputvalideringen på server");
            //act
            var resultat = await stoppController.OppdaterStoppnavn(stopp) as BadRequestObjectResult;

            //assert
            Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode);
            Assert.Equal("Feil i inputvalideringen på server", resultat.Value);
        }
示例#8
0
        public async Task OppdaterStoppnavn_Feil()
        {
            //arrange
            Stopp stopp = new Stopp {
                Id = 1, Navn = "Oslo"
            };

            mockRepo.Setup(s => s.OppdaterStoppnavn(stopp)).ReturnsAsync(false);

            MockSession(_innlogget);
            //act
            var resultat = await stoppController.OppdaterStoppnavn(stopp) as BadRequestObjectResult;

            //assert
            Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode);
            Assert.Equal($"Endring av Stoppnavn kunne ikke utføres med verdiene: { stopp}", resultat.Value);
        }
示例#9
0
        public async Task HentEtStopp_Regex()
        {
            // Arrange
            Stopp forventetStopp = new Stopp {
                Id = 1, Navn = "34"
            };

            mockRepo.Setup(b => b.HentEtStopp(forventetStopp.Id)).ReturnsAsync(forventetStopp);
            stoppController.ModelState.AddModelError("Navn", "Feil i inputvalidering på server");
            MockSession(_innlogget);

            // Act
            var resultat = await stoppController.HentEtStopp(forventetStopp.Id) as BadRequestObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode);
            Assert.Equal("Feil i inputvalidering på server", resultat.Value);
        }
示例#10
0
        public async Task HentEtStopp_Riktig()
        {
            // Arrange
            Stopp forventetStopp = new Stopp {
                Id = 1, Navn = "Oslo"
            };

            mockRepo.Setup(b => b.HentEtStopp(forventetStopp.Id)).ReturnsAsync(forventetStopp);
            MockSession(_innlogget);
            // Act
            var resultat = await stoppController.HentEtStopp(forventetStopp.Id) as OkObjectResult;

            Stopp faktiskStopp = (Stopp)resultat.Value;

            // Assert
            Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode);
            Assert.Equal(forventetStopp, faktiskStopp);
        }
示例#11
0
        /*
         * Hjelpemetoder
         */
        // Returnerer en List med Stopp-objekter
        private List <Stopp> HentStoppListe()
        {
            Stopp stopp1 = new Stopp {
                Id = 1, Navn = "Bergen"
            };
            Stopp stopp2 = new Stopp {
                Id = 1, Navn = "Oslo"
            };
            Stopp stopp3 = new Stopp {
                Id = 1, Navn = "Vadheim"
            };
            Stopp stopp4 = new Stopp {
                Id = 1, Navn = "Trondheim"
            };

            return(new List <Stopp> {
                stopp1, stopp2, stopp3, stopp4
            });
        }
示例#12
0
        public async Task <ActionResult> HentEtStopp(int id)
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString(_innlogget)))
            {
                return(Unauthorized("Ikke innlogget"));
            }
            if (ModelState.IsValid)
            {
                Stopp stopp = await _db.HentEtStopp(id);

                if (stopp == null)
                {
                    _log.LogInformation("Stoppet ble ikke funnet");
                    return(NotFound("Stoppet ble ikke funnet"));
                }
                return(Ok(stopp));
            }
            _log.LogInformation("Feil i inputvalideringen på server");
            return(BadRequest("Feil i inputvalidering på server"));
        }
示例#13
0
        // Hjelpemetode som finner stoppnummeret til et spesifikt stopp i en spesifikk rute
        public async Task <int> FinnStoppNummer(Stopp stopp, Ruter fellesRute)
        {
            try
            {
                RuteStopp ruteStopp = await _db.RuteStopp
                                      .FirstOrDefaultAsync(rs => rs.Stopp == stopp && rs.Rute == fellesRute);

                if (ruteStopp == null)
                {
                    _log.LogInformation("Stoppet er ikke på ruten");
                    return(-1);
                }
                return(ruteStopp.StoppNummer);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(-1);
            }
        }
示例#14
0
        // TODO: Sjekke at dette stoppnavnet finnes alt
        public async Task <ActionResult> OppdaterStoppnavn(Stopp innStopp)
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString(_innlogget)))
            {
                return(Unauthorized("Ikke innlogget"));
            }
            if (ModelState.IsValid)
            {
                bool EndringOK = await _db.OppdaterStoppnavn(innStopp);

                if (!EndringOK)
                {
                    melding = $"Endring av Stoppnavn kunne ikke utføres med verdiene: {innStopp}";
                    _log.LogWarning(melding);
                    return(BadRequest(melding));
                }
                melding = $"Endring av Stoppnavn ble utført med verdiene: {innStopp}";
                _log.LogInformation(melding);
                return(Ok(melding));
            }

            _log.LogWarning(ugyldigValidering);
            return(BadRequest(ugyldigValidering));
        }
示例#15
0
        public async Task <bool> NyRuteStopp(NyRuteStopp innRuteStopp)
        {
            try
            {
                // Returnerer false hvis nyttStoppNummer er mindre enn det minste eller større en det største som allerede eksisterer
                int antallRuteStopp = await _db.RuteStopp.Where(rs => rs.Rute.Linjekode == innRuteStopp.Linjekode).CountAsync();

                int nyttStoppNummer = innRuteStopp.StoppNummer;
                if (nyttStoppNummer > antallRuteStopp + 1 || nyttStoppNummer <= 0)
                {
                    return(false);
                }

                // Henter alle RuteStopp fra samme rute som har likt eller høyre stoppnummer enn det nye stoppet
                List <RuteStopp> endreStoppNummer = await LiktEllerSenereStoppNummer(innRuteStopp.StoppNummer, innRuteStopp.Linjekode);

                // Adderer alle med stoppnummer som er større eller lik det nye rutestoppet med 1
                foreach (RuteStopp rs in endreStoppNummer)
                {
                    rs.StoppNummer++;
                }

                // Henter ruten til det nye RuteStopp-objektet
                Ruter rute = await _db.Ruter.FindAsync(innRuteStopp.Linjekode);

                // Nytt RuteStopp-objekt
                RuteStopp nyttRuteStopp = new RuteStopp
                {
                    Id                    = innRuteStopp.Id,
                    StoppNummer           = innRuteStopp.StoppNummer,
                    MinutterTilNesteStopp = innRuteStopp.MinutterTilNesteStopp,
                    Rute                  = rute
                };

                // Sjekker om det allerede eksisterer et stopp med tilsvarende navn i DB
                Stopp eksisterendeStopp = await _db.Stopp
                                          .Where(s => s.Navn == innRuteStopp.Stoppnavn).SingleOrDefaultAsync();

                // Hvis det eksiterer blir dette Stopp-objektet brukt
                if (eksisterendeStopp != null)
                {
                    nyttRuteStopp.Stopp = eksisterendeStopp;
                }
                // Hvis det ikke eksiterer blir et nytt Stopp-okbjekt lagt til
                else
                {
                    Stopp nyttStopp = new Stopp {
                        Navn = innRuteStopp.Stoppnavn
                    };
                    nyttRuteStopp.Stopp = nyttStopp;
                }

                _db.RuteStopp.Add(nyttRuteStopp);
                await _db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(false);
            }
        }
示例#16
0
        // Fullfør ordre
        public async Task <bool> FullforOrdre(NyOrdre ordreModel)
        {
            try
            {
                // Henter ut ruten som tilhører OrdreModel
                Ruter rute = await _db.Ruter.FirstOrDefaultAsync(r => r.Linjekode == ordreModel.Linjekode);

                // Henter Avgangens Id
                Avganger avgang = await _db.Avganger.FirstOrDefaultAsync(a => a.Id == ordreModel.AvgangId);

                // Finner startStopp, og finner stoppnummeret i ruten
                Stopp startStopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == ordreModel.StartStopp);

                int stoppNummer1 = await _hjelp.FinnStoppNummer(startStopp, rute);

                // Finner sluttStopp, og finner stoppnummeret i ruten
                Stopp sluttStopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == ordreModel.SluttStopp);

                int stoppNummer2 = await _hjelp.FinnStoppNummer(sluttStopp, rute);

                // Regner ut antall stopp
                int antallStopp = stoppNummer2 - stoppNummer1;

                // Finner summen for reisen
                // antallStopp, rute, liste med billettype
                int sum = await _hjelp.BeregnPris(rute, antallStopp, ordreModel.Billettyper);

                // Lager en ordre basert på ordreModel, rute og avgang
                var ordre = new Ordre
                {
                    Epost      = ordreModel.Epost,
                    StartStopp = startStopp,
                    SluttStopp = sluttStopp,
                    Sum        = sum,
                    Rute       = rute,
                    Avgang     = avgang
                };

                // Legger ordren til i databasen
                _db.Ordre.Add(ordre);

                // Raden til spesifisert avgang
                Avganger dbAvgang = _db.Avganger.Find(avgang.Id);

                // Går gjennom listen med billettyper
                foreach (string billettype in ordreModel.Billettyper)
                {
                    // Henter ut en billettype i listen
                    Billettyper billettypeObjekt = await _db.Billettyper.FirstOrDefaultAsync(a => a.Billettype == billettype);

                    // Lager en ordrelinje
                    var ordrelinje = new Ordrelinjer
                    {
                        Billettype = billettypeObjekt,
                        Ordre      = ordre
                    };

                    // Legger denne ordrelinjen til databasen
                    _db.Ordrelinjer.Add(ordrelinje);

                    // Øker antalll solgte billetter med 1
                    dbAvgang.SolgteBilletter++;
                }

                // Lagrer alt som er blitt lagt til i databasen
                _db.SaveChanges();

                return(true);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(false);
            }
        }
示例#17
0
        public async Task <Reisedetaljer> FinnNesteAvgang(Avgangkriterier input)
        {
            try
            {
                // Henter avgang- og påstigningsstoppet fra DB
                Stopp startStopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == input.StartStopp);

                Stopp sluttStopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == input.SluttStopp);

                if (startStopp.Equals(sluttStopp))
                {
                    _log.LogInformation("Sluttstopp kan ikke være lik startstopp!");
                    return(null);
                }

                // Finner alle Rutene som inkluderer påstigning og som inkluderer avstigning
                List <Ruter> startStoppRuter = await _hjelp.FinnRuteneTilStopp(startStopp);

                List <Ruter> sluttStoppRuter = await _hjelp.FinnRuteneTilStopp(sluttStopp);

                // Finner ruten påstigning og avstigning har til felles
                Ruter fellesRute = _hjelp.FinnFellesRute(startStoppRuter, sluttStoppRuter);
                if (fellesRute == null)
                {
                    return(null);
                }                                        // Hvis stoppene ikke har noen felles ruter

                // Finne ut hvilket stoppNummer påstigning og avstigning har i den felles ruten
                int stoppNummer1 = await _hjelp.FinnStoppNummer(startStopp, fellesRute);

                int stoppNummer2 = await _hjelp.FinnStoppNummer(sluttStopp, fellesRute);

                // Hvis første stopp kommer senere i ruten enn siste stopp
                if (stoppNummer1 > stoppNummer2)
                {
                    _log.LogInformation("Seneste stopp har ikke lavere stoppnummer enn tidligste stopp!");
                    return(null);
                }

                int reisetid = await _hjelp.BeregnReisetid(stoppNummer1, stoppNummer2, fellesRute); // Beregner reisetiden fra stopp påstigning til avstigning

                int      antallBilletter = input.Billettyper.Count();                               // antall billetter brukeren ønsker
                DateTime innTid          = _hjelp.StringTilDateTime(input.Dato, input.Tidspunkt);   // Konverterer fra strings til DateTime

                // Finne neste avgang som passer, basert på brukerens input
                Avganger nesteAvgang = await _hjelp.NesteAvgang(fellesRute, reisetid, input.AvreiseEtter, innTid, antallBilletter);

                if (nesteAvgang == null)
                {
                    return(null);
                }                                          // Hvis ingen avgang ble funnet

                // Beregner avreise og ankomst
                DateTime avreise = await _hjelp.BeregnAvreisetid(nesteAvgang.Avreise, stoppNummer1, fellesRute);

                DateTime ankomst = avreise.AddMinutes(reisetid);

                // Konverterer avreise og ankomst fra DateTime til en strings
                string utAvreise = avreise.ToString("dd-MM-yyyy HH:mm");
                string utAnkomst = ankomst.ToString("dd-MM-yyyy HH:mm");

                // Beregner prisen basert på startpris og antall stopp
                int antallStopp = stoppNummer2 - stoppNummer1;
                int pris        = await _hjelp.BeregnPris(fellesRute, antallStopp, input.Billettyper);

                // Opretter Avgang-objektet som skal sendes til klienten
                Reisedetaljer utAvgang = new Reisedetaljer
                {
                    AvgangId  = nesteAvgang.Id,
                    Rutenavn  = fellesRute.Rutenavn,
                    Linjekode = fellesRute.Linjekode,
                    Pris      = pris,
                    Avreise   = utAvreise,
                    Ankomst   = utAnkomst,
                    Reisetid  = reisetid
                };

                return(utAvgang);
            }
            catch (Exception e) {
                _log.LogError(e.Message);
                return(null);
            }
        }