예제 #1
0
        public async Task <ActionResult> FinnNesteAvgang(Avgangkriterier kriterier)
        {
            if (ModelState.IsValid)
            {
                Reisedetaljer nesteAvgang = await _db.FinnNesteAvgang(kriterier);

                if (nesteAvgang == null)
                {
                    melding = $"Ingen avgang ble funnet";
                    _log.LogWarning(melding);
                    return(NotFound(melding));
                }
                return(Ok(nesteAvgang));
            }
            _log.LogWarning(ugyldigValidering);
            return(BadRequest(ugyldigValidering));
        }
예제 #2
0
        public async Task FinnNesteAvgang_RiktigeVerdier()
        {
            // Arrange
            Avgangkriterier param           = HentAvgangParam();
            Reisedetaljer   forventetAvgang = HentAvgang();

            // Act
            mockRepo.Setup(b => b.FinnNesteAvgang(param)).ReturnsAsync(HentAvgang());
            var resultat = await avgangController.FinnNesteAvgang(param) as OkObjectResult;

            Reisedetaljer faktiskAvgang = (Reisedetaljer)resultat.Value;

            // Assert
            Assert.Equal(forventetAvgang.AvgangId, faktiskAvgang.AvgangId);
            Assert.Equal(forventetAvgang.Rutenavn, faktiskAvgang.Rutenavn);
            Assert.Equal(forventetAvgang.Linjekode, faktiskAvgang.Linjekode);
            Assert.Equal(forventetAvgang.Pris, faktiskAvgang.Pris);
            Assert.Equal(forventetAvgang.Avreise, faktiskAvgang.Avreise);
            Assert.Equal(forventetAvgang.Ankomst, faktiskAvgang.Ankomst);
            Assert.Equal(forventetAvgang.Reisetid, faktiskAvgang.Reisetid);
        }
예제 #3
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);
            }
        }