public ActionResult Create(RequestTrip req) { int numOfNodes = 0; Trip trip = new Trip(); trip.Name = req.Name; trip.Duration = Convert.ToInt32(req.Duration); trip.PhotoUrl = req.PhotoUrl; trip.CreationDate = DateTime.Now; foreach (StringPoint[] route in req.Routes) { numOfNodes += route.Length; } trip.NumOfNodes = numOfNodes; if (ModelState.IsValid) { db.Trips.Add(trip); db.SaveChanges(); Users_Trips ut = new Users_Trips(); string userId = User.Identity.GetUserId(); ut.AspNetUser = db.AspNetUsers.Where(u => u.Id == userId).FirstOrDefault(); ut.Trip = trip; ut.Author = true; if (ModelState.IsValid) { db.Users_Trips.Add(ut); db.SaveChanges(); } CreateRoutesAndNodes(req, trip); } return(Json(trip.TripId, JsonRequestBehavior.AllowGet)); }
//создает узлы маршоута разбивая их по дням private void CreateRoutesAndNodes(RequestTrip req, Trip trip) { int i = 0, j = 0; Node startNode = new Node(); startNode.Lat = double.Parse(req.StartPoint.Lat, CultureInfo.InvariantCulture); startNode.Lng = double.Parse(req.StartPoint.Lng, CultureInfo.InvariantCulture); startNode.PlaceId = null; startNode.Address = req.StartPoint.Address; Node endNode = new Node(); if (req.StartPoint == req.EndPoint) { endNode = startNode; } else { endNode.Lat = double.Parse(req.EndPoint.Lat, CultureInfo.InvariantCulture); endNode.Lng = double.Parse(req.EndPoint.Lng, CultureInfo.InvariantCulture); endNode.PlaceId = null; endNode.Address = req.EndPoint.Address; } if (ModelState.IsValid) { db.Nodes.Add(startNode); db.Nodes.Add(endNode); db.SaveChanges(); } for (i = 0; i < req.Routes.Length; i++) { Route route = new Route(); route.Trip = trip; route.DayNum = i + 1; if (ModelState.IsValid) { db.Routes.Add(route); db.SaveChanges(); for (j = 0; j < req.Routes[i].Length; j++) { Node node = new Node(); //node.Lat = double.Parse(req.Routes[i][j].Lat, CultureInfo.InvariantCulture); //node.Lng = double.Parse(req.Routes[i][j].Lng, CultureInfo.InvariantCulture); node.Lat = GetDouble(req.Routes[i][j].Lat); node.Lng = GetDouble(req.Routes[i][j].Lng); node.PlaceId = req.Routes[i][j].PlaceId; node.Address = null; if (ModelState.IsValid) { db.Nodes.Add(node); db.SaveChanges(); Routes_Nodes rn = new Routes_Nodes(); rn.Node = node; rn.Route = route; rn.IndexNum = j + 1; db.Routes_Nodes.Add(rn); } } Routes_Nodes rnStart = new Routes_Nodes(); rnStart.Node = startNode; rnStart.Route = route; rnStart.IndexNum = 0; db.Routes_Nodes.Add(rnStart); Routes_Nodes rnEnd = new Routes_Nodes(); rnEnd.Node = endNode; rnEnd.Route = route; rnEnd.IndexNum = req.Routes[i].Length + 1; db.Routes_Nodes.Add(rnEnd); db.SaveChanges(); } } }