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 })); }
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 }); } } }
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(); }
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(); }
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(); }
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))); }
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 }); } }
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()); } }
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); }
public BoatPageVM AddEmptyVPP(BoatPageVM boat) { boat.VppList = new AngleTwsKnotVM[] { new AngleTwsKnotVM { } }; return(boat); }