예제 #1
0
        public RuteStopp NyttRuteStopp(string[] argumenter)
        {
            Console.WriteLine(argumenter[0]);
            Console.WriteLine(argumenter[1]);
            Console.WriteLine(argumenter[2]);
            string   holdeplassNavn      = argumenter[0];
            string   ruteNavn            = argumenter[1];
            int      minutterEtterAvgang = int.Parse(argumenter[2]);
            TimeSpan stoppTid            = TimeSpan.FromMinutes(minutterEtterAvgang);


            Holdeplass holdeplass = _db.Holdeplasser.Where(h => h.Sted == holdeplassNavn).FirstOrDefault();
            Rute       rute       = _db.Ruter.Where(r => r.Navn == ruteNavn).FirstOrDefault();

            if (holdeplass != null && rute != null)
            {
                RuteStopp nyttRuteStopp = new RuteStopp();
                nyttRuteStopp.Rute       = rute;
                nyttRuteStopp.Holdeplass = holdeplass;
                nyttRuteStopp.StoppTid   = stoppTid;
                _db.Rutestopp.Add(nyttRuteStopp);
                _db.SaveChanges();
                return(nyttRuteStopp);
            }
            Log.Information("Nytt rutestopp lagt til.");
            return(null);
        }
예제 #2
0
        public async Task HentRuteStoppLoggetInn()
        {
            var oslo = new Holdeplass {
                Sted = "Oslo", Sone = 1
            };
            var OsloStavanger = new Rute {
                Navn = "Oslo-Stavanger"
            };
            var RuteOsloStavangerStoppOslo = new RuteStopp {
                Holdeplass = oslo, Rute = OsloStavanger, StoppTid = TimeSpan.FromMinutes(0)
            };

            var liste = new List <RuteStopp>();

            liste.Add(RuteOsloStavangerStoppOslo);

            mockRep.Setup(k => k.HentRuteStopp()).ReturnsAsync(liste);
            var bestillingController = new AdminController(mockRep.Object);

            mockSession[_loggetInn] = _loggetInn;
            mockHttpContext.Setup(s => s.Session).Returns(mockSession);
            bestillingController.ControllerContext.HttpContext = mockHttpContext.Object;

            var resultat = await bestillingController.HentRuteStopp() as OkObjectResult;

            Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode);
            Assert.Equal <List <RuteStopp> >((List <RuteStopp>)resultat.Value, liste);
        }
예제 #3
0
        public async Task <bool> EndreRS(RuteStopp endreRS)
        {
            try
            {
                var etRS = await _db.Rutestopp.FindAsync(endreRS.ID);

                if (!etRS.Holdeplass.Sted.Equals(endreRS.Holdeplass.Sted))
                {
                    var sjekkHoldeplass = _db.Holdeplasser.Where(s => s.Sted.Contains(etRS.Holdeplass.Sted));
                    if (sjekkHoldeplass == null)
                    {
                        var holdeplassRad = new Holdeplass();
                        holdeplassRad.Sted = endreRS.Holdeplass.Sted;
                        holdeplassRad.Sone = endreRS.Holdeplass.Sone;
                        etRS.Holdeplass    = holdeplassRad;
                    }
                    else
                    {
                        etRS.Holdeplass = endreRS.Holdeplass;
                    }
                }
                etRS.StoppTid = endreRS.StoppTid;

                await _db.SaveChangesAsync();

                Log.Information("Rutestopp id: {id} endret.", endreRS.ID);
                return(true);
            }
            catch (Exception e)
            {
                Log.Error("Error i EndreRS: {error}", e);
                return(false);
            }
        }
예제 #4
0
        public async Task EndreRSLoggetInnFeilInput()
        {
            var oslo = new Holdeplass {
                Sted = "", Sone = 1
            };
            var OsloStavanger = new Rute {
                Navn = "Oslo-Stavanger"
            };
            var RuteOsloStavangerStoppOslo = new RuteStopp {
                Holdeplass = oslo, Rute = OsloStavanger, StoppTid = TimeSpan.FromMinutes(0)
            };

            mockRep.Setup(k => k.EndreRS(RuteOsloStavangerStoppOslo)).ReturnsAsync(true);

            var bestillingController = new AdminController(mockRep.Object);

            bestillingController.ModelState.AddModelError("Holdeplass", "Feil i inputvalidering på server");

            mockSession[_loggetInn] = _loggetInn;
            mockHttpContext.Setup(s => s.Session).Returns(mockSession);
            bestillingController.ControllerContext.HttpContext = mockHttpContext.Object;

            var resultat = await bestillingController.EndreRS(It.IsAny <RuteStopp>()) as BadRequestObjectResult;

            Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode);
            Assert.Equal("Feil i inputvalidering på server", resultat.Value);
        }
예제 #5
0
        public async Task <bool> FjernRuteStopp(int Id)
        {
            try
            {
                // Fjerner aktuelt RuteStopp
                RuteStopp ruteStoppTilFjerning = await _db.RuteStopp.FindAsync(Id);

                _db.Remove(ruteStoppTilFjerning);
                int    stoppNummer = ruteStoppTilFjerning.StoppNummer;
                string linjekode   = ruteStoppTilFjerning.Rute.Linjekode;

                // Henter alle RuteStopp fra samme rute som har likt eller høyre stoppnummer enn det som ble fjernet
                List <RuteStopp> endreStoppNummer =
                    await LiktEllerSenereStoppNummer(stoppNummer, linjekode);

                // Subtraherer alle med stoppnummer som er større eller lik det fjernede rutestoppet med 1
                foreach (RuteStopp rs in endreStoppNummer)
                {
                    rs.StoppNummer--;
                }
                await _db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(false);
            }
        }
예제 #6
0
        public async Task <bool> SlettRS(int id)
        {
            try
            {
                RuteStopp etRS = await _db.Rutestopp.FindAsync(id);

                _db.Rutestopp.Remove(etRS);
                await _db.SaveChangesAsync();

                Log.Information("Rutestopp id: {id} slettet.", id);
                return(true);
            }
            catch (Exception e)
            {
                Log.Error("Error i SLettRS: {error}", e);
                return(false);
            }
        }
예제 #7
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);
            }
        }
예제 #8
0
        public async Task <ActionResult> LagreRS(RuteStopp innRS)
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString(_loggetInn)))
            {
                return(Unauthorized("Ikke logget inn"));
            }
            if (ModelState.IsValid)
            {
                bool returOK = await _db.LagreRS(innRS);

                if (!returOK)
                {
                    Log.Information("Lagring av RuteStopp kunne ikke utføres");
                    return(NotFound("Lagring av RuteStopp kunne ikke utføres"));
                }
                return(Ok("Rutestopp lagret"));
            }
            Log.Information("Feil i inputvalidering");
            return(BadRequest("Feil i inputvalidering på server"));
        }
예제 #9
0
        public async Task <ActionResult> EtRuteStopp(int id)
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString(_loggetInn)))
            {
                return(Unauthorized());
            }

            if (ModelState.IsValid)
            {
                RuteStopp etRS = await _db.EtRuteStopp(id);

                if (etRS == null)
                {
                    Log.Information("Fant ikke rutestopp");
                    return(NotFound("Fant ikke rutestopp"));
                }
                return(Ok(etRS));
            }
            Log.Information("Feil i inputvalidering");
            return(BadRequest("Feil i inputvalidering på server"));
        }
예제 #10
0
        public async Task <NyRuteStopp> HentEtRuteStopp(int id)
        {
            try
            {
                RuteStopp ruteStopp = await _db.RuteStopp.FindAsync(id);

                NyRuteStopp utRuteStopp = new NyRuteStopp
                {
                    Stoppnavn             = ruteStopp.Stopp.Navn,
                    StoppNummer           = ruteStopp.StoppNummer,
                    MinutterTilNesteStopp = ruteStopp.MinutterTilNesteStopp,
                    Linjekode             = ruteStopp.Rute.Linjekode
                };
                return(utRuteStopp);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(null);
            }
        }
예제 #11
0
        public async Task <RuteStopp> EtRuteStopp(int id)
        {
            try
            {
                RuteStopp etRS = await _db.Rutestopp.FindAsync(id);

                Holdeplass holdeplass = await _db.Holdeplasser.FindAsync(etRS.Holdeplass.ID);

                var hentetRS = new RuteStopp()
                {
                    ID         = etRS.ID,
                    StoppTid   = etRS.StoppTid,
                    Holdeplass = holdeplass
                };
                return(hentetRS);
            }
            catch (Exception e)
            {
                Log.Error("Error i EtRuteStopp: {error}", e);
                return(null);
            }
        }
예제 #12
0
        public async Task <bool> LagreRS(RuteStopp innRS)
        {
            try
            {
                var nyRS = new RuteStopp();
                nyRS.StoppTid = innRS.StoppTid;

                // sjekker om holdeplass allerede ligger i databasen, legger til ny dersom den ikke gjør det

                var sjekkHoldeplass = _db.Holdeplasser.Where(navn => navn.Sted.Contains(innRS.Holdeplass.Sted));
                if (sjekkHoldeplass == null)
                {
                    // oppretter en ny holdeplass
                    var nyHoldeplass = new Holdeplass();
                    nyHoldeplass.Sted = innRS.Holdeplass.Sted;
                    nyHoldeplass.Sone = innRS.Holdeplass.Sone;
                    nyRS.Holdeplass   = nyHoldeplass;
                }
                else
                {
                    nyRS.Holdeplass.Sted = innRS.Holdeplass.Sted;
                    nyRS.Holdeplass.Sone = innRS.Holdeplass.Sone;
                }

                _db.Rutestopp.Add(nyRS);
                await _db.SaveChangesAsync();

                Log.Information("Rutestopp lagret.");
                return(true);
            }
            catch (Exception e)
            {
                Log.Error("Error i LagreRS: {error}", e);
                return(false);
            }
        }
예제 #13
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);
            }
        }