Пример #1
0
        public IActionResult UpdateBoat(BoatPageVM model)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.ActionName  = "UpdateBoat";
                ViewBag.SaveBtnName = "Update Boat";
                return(View(nameof(BoatPage), model));
            }
            //Fangar en bugg vi ännu inte lyckats återskapa, där modellen innehåller en rad med 0-värden.
            var zeroValuesToRemove = model.VppList
                                     .Where(v => v.TWS == 0);

            if (zeroValuesToRemove.Count() > 0)
            {
                var vppListAsList = model.VppList.ToList();
                foreach (var vpp in zeroValuesToRemove)
                {
                    vppListAsList.Remove(vpp);
                }
                model.VppList = vppListAsList.ToArray();
            }

            repository.UpdateBoat(model);
            return(RedirectToAction(nameof(BoatPage), new { id = model.BoatID }));
        }
Пример #2
0
        public void UpdateBoat(BoatPageVM viewModel)
        {
            Boat boatToUpdate = boats.FirstOrDefault(b => b.Id == viewModel.BoatID);

            boatToUpdate.Boatname     = viewModel.Boatname;
            boatToUpdate.Manufacturer = viewModel.Manufacturer;
            boatToUpdate.Modelname    = viewModel.Modelname;

            foreach (AngleTwsKnotVM item in viewModel.VppList)
            {
                //Uppdatera VPP'n om den redan finns.
                if (item.ID > 0)
                {
                    var boatVPP = boatToUpdate.Vpp.FirstOrDefault(v => v.Id == item.ID);
                    boatVPP.Knot       = item.Knot;
                    boatVPP.Tws        = item.TWS;
                    boatVPP.WindDegree = item.WindDegree;
                }
                //Om VPP'n inte finns så lägg till.
                else
                {
                    boatToUpdate.Vpp.Add(new Vpp
                    {
                        Boat       = boatToUpdate,
                        BoatId     = viewModel.BoatID,
                        Knot       = item.Knot,
                        Tws        = item.TWS,
                        WindDegree = item.WindDegree,
                        Id         = vppList[vppList.Count - 1].Id
                    });
                }
            }
        }
Пример #3
0
        public void SaveBoat(BoatPageVM model)
        {
            var boat = new Boat {
                Boatname = model.Boatname, Manufacturer = model.Manufacturer, Modelname = model.Modelname, Uid = model.Uid
            };

            foreach (var vpp in model.VppList)
            {
                boat.VppuserInput.Add(new VppuserInput
                {
                    Tws        = vpp.TWS,
                    WindDegree = vpp.WindDegree,
                    Knot       = vpp.Knot,
                });
            }

            foreach (var vpp in model.VppDBList)
            {
                boat.Vpp.Add(new Vpp
                {
                    Tws        = vpp.TWS,
                    WindDegree = vpp.WindDegree,
                    Knot       = vpp.Knot
                });
            }
            context.Boat.Add(boat);
            context.SaveChanges();
        }
Пример #4
0
        public void UpdateBoat(BoatPageVM viewModel)
        {
            Boat boatToUpdate = context.Boat.Include(b => b.VppuserInput).Include(b => b.Vpp).FirstOrDefault(b => b.Id == viewModel.BoatID);

            boatToUpdate.Boatname     = viewModel.Boatname;
            boatToUpdate.Manufacturer = viewModel.Manufacturer;
            boatToUpdate.Modelname    = viewModel.Modelname;

            boatToUpdate.VppuserInput.Clear();
            foreach (var vpp in viewModel.VppList)
            {
                boatToUpdate.VppuserInput.Add(new VppuserInput
                {
                    Tws        = vpp.TWS,
                    WindDegree = vpp.WindDegree,
                    Knot       = vpp.Knot
                });
            }

            InterpolateVpp(viewModel);
            boatToUpdate.Vpp.Clear();
            foreach (var vpp in viewModel.VppDBList)
            {
                boatToUpdate.Vpp.Add(new Vpp
                {
                    Tws        = vpp.TWS,
                    WindDegree = vpp.WindDegree,
                    Knot       = vpp.Knot
                });
            }

            context.SaveChanges();
        }
Пример #5
0
        public void InterpolateVpp(BoatPageVM viewModel)
        {
            //Plockar ut alla distinkta tws-värden.
            var twsEs = viewModel.VppList
                        .Select(b => b.TWS)
                        .Distinct();

            //Gör om VppList från array till lista för att enklare kunna lägga till värden.
            var VppListAsList = viewModel.VppList
                                .Select(v => new AngleTwsKnotDBVM
            {
                ID         = v.ID,
                TWS        = v.TWS,
                WindDegree = v.WindDegree,
                Knot       = v.Knot
            })
                                .ToList();

            //Anropar interpolationslogik för varje unik tws som lagts till.
            foreach (var tws in twsEs)
            {
                //De här värdena används när vi interpolerar.
                var degreesAndKnots = viewModel.VppList
                                      .Where(b => b.TWS == tws)
                                      .Select(b => new
                {
                    degrees = b.WindDegree,
                    knots   = b.Knot
                });
                //Den här används i sista for-loopen för att inte använda samma värden två gånger.
                var degreesOnly = degreesAndKnots
                                  .Select(d => d.degrees);
                //Krävs för interpolationsmetoden, se klassbiblioteket för mer info.
                decimal[] interpolationInfo = new decimal[180 + 1];
                foreach (var degreeAndKnot in degreesAndKnots)
                {
                    interpolationInfo[degreeAndKnot.degrees] = degreeAndKnot.knots;
                }
                InterpolationLogic.VppInterpolation(interpolationInfo);
                //Lägger till de nya värden som fåtts ut i Vpp-listan.
                for (int i = 0; i < interpolationInfo.Length; i++)
                {
                    if (!degreesOnly.Contains(i))
                    {
                        VppListAsList.Add(new AngleTwsKnotDBVM
                        {
                            TWS        = tws,
                            WindDegree = i,
                            Knot       = interpolationInfo[i]
                        });
                    }
                }
            }
            //Lägger in de interpolerade värdena i databaslistan som aldrig ses av användaren
            viewModel.VppDBList = VppListAsList.ToArray();
        }
Пример #6
0
        public IActionResult AddBoatToDatabase(BoatPageVM model)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.SaveBtnName = "Add Boat";
                ViewBag.ActionName  = "AddBoatToDatabase";
                return(View(nameof(BoatPage), model));
            }

            model.Uid = userManager.GetUserId(HttpContext.User);

            repository.InterpolateVpp(model);
            repository.SaveBoat(model);
            return(RedirectToAction(nameof(Route)));
        }
Пример #7
0
        public void SaveBoat(BoatPageVM model)
        {
            var boat = new Boat {
                Boatname = model.Boatname, Manufacturer = model.Manufacturer, Modelname = model.Modelname
            };

            foreach (var vpp in model.VppList)
            {
                boat.Vpp.Add(new Vpp
                {
                    Tws        = vpp.TWS,
                    WindDegree = vpp.WindDegree,
                    Knot       = vpp.Knot
                });
            }
        }
Пример #8
0
        public IActionResult BoatPage(int id)
        {
            if (id > 0)
            {
                BoatPageVM boat = repository.GetBoatPageVM(id);
                if (boat.VppList.Count() < 1)
                {
                    boat = repository.AddEmptyVPP(boat);
                }

                ViewBag.ActionName  = "UpdateBoat";
                ViewBag.SaveBtnName = "Update Boat";
                return(View(boat));
            }
            else
            {
                ViewBag.SaveBtnName = "Add Boat";
                ViewBag.ActionName  = "AddBoatToDatabase";
                return(View());
            }
        }
Пример #9
0
        public BoatPageVM GetBoatPageVM(int BoatID)
        {
            Boat boat = context.Boat.Include(b => b.VppuserInput).Include(b => b.Vpp).FirstOrDefault(b => b.Id == BoatID);

            var baten = new BoatPageVM
            {
                Boatname     = boat.Boatname,
                Manufacturer = boat.Manufacturer,
                Modelname    = boat.Modelname,
                BoatID       = boat.Id,
                VppList      = boat.VppuserInput.Select(v => new AngleTwsKnotVM
                {
                    Knot       = v.Knot,
                    TWS        = v.Tws,
                    WindDegree = v.WindDegree,
                    ID         = v.Id
                })
                               .OrderBy(v => v.TWS)
                               .ThenBy(v => v.WindDegree)
                               .ToArray()
            };

            return(baten);
        }
Пример #10
0
 public BoatPageVM AddEmptyVPP(BoatPageVM boat)
 {
     boat.VppList = new AngleTwsKnotVM[] { new AngleTwsKnotVM {
                                           } };
     return(boat);
 }