Пример #1
0
        public ActionResult GetTrips(string startPointGid, string endPointGid, DateTime dateAt, DateTime? dateTo, string search, string startPointFullName, string endPointFullName)
        {
            var currentUser = _usersService.GetUserByLogin(System.Web.HttpContext.Current.User.Identity.Name);

            var model = new TripsListModel
            {
                StartPointFullName = startPointFullName,
                StartPointGid = startPointGid,
                StartPointShortName = startPointFullName.Split(',').Last().Trim(),
                EndPointFullName = endPointFullName,
                EndPointGid = endPointGid,
                EndPointShortName = endPointFullName.Split(',').Last().Trim(),
                DateAt = dateAt.ToShortDateString(),
                DateTo = dateTo.HasValue ? dateTo.Value.ToShortDateString() : string.Empty
            };

            if (dateTo == null)
            {
                dateTo = dateAt;
            }

            var trips = _tripsService.GetTrips(startPointGid, endPointGid, dateAt, dateTo.Value, search == "driver" ? 2 : 1, 1).OrderBy(x => x.Date).ToList();

            if (trips.Any())
            {
                List<GetActualRequests_Result> sentRequests = null;
                if (currentUser != null)
                {
                    sentRequests = _requestsService.GetActualRequests(currentUser.Id, trips.First().StartPointGid,
                                                                  trips.First().EndPointGid).ToList();
                }

                foreach (var trip in trips)
                {
                    if (currentUser != null && trip.OwnerId == currentUser.Id)
                    {
                        continue;
                    }

                    var m = new TripModel
                    {
                        TripId = trip.Id,
                        RouteId = trip.RouteId,
                        TripDateId = trip.TripDateId,
                        StartPointFullName = trip.StartPointFullName,
                        StartPointShortName = trip.StartPointShortName,
                        EndPointFullName = trip.EndPointFullName,
                        EndPointShortName = trip.EndPointShortName,
                        MainRouteStr = trip.MainRouteStr.Split(';'),
                        MainRouteShortStr = trip.MainRouteShortStr.Split(';'),
                        IsDriver = trip.TripType == TripType.Driver,
                        OwnerName = string.Format("{0} {1}", trip.OwnerFirstName, trip.OwnerLastName),
                        Date = trip.Date,
                        SeatsNumber = trip.Seats,
                        Cost = trip.Cost,
                        StatusForUser = sentRequests != null && sentRequests.FirstOrDefault(x => x.OwnerTripDateId == trip.TripDateId) != null ? "sent" : "new"
                    };
                    model.trips.Add(m);
                }
            }

            return this.View("TripsList", model);
        }
Пример #2
0
        public JsonResult SaveTrip(TripModel model, string points, DateTime dateAt, DateTime? dateTo, string costPerRoute)
        {
            var currentUser = _usersService.GetUserByLogin(System.Web.HttpContext.Current.User.Identity.Name);
            var trip = new Trip
                {
                    OwnerId = currentUser.Id
                };

            var costs = costPerRoute.Split(';');

            // Дисериализуем строку с массивом точек
            var js = new JavaScriptSerializer();
            var deserializedPoints = (object[])js.DeserializeObject(points);
            var myPoints = new List<SJSonModel>();

            if (deserializedPoints != null)
            {
                // получаем массив точек
                myPoints.AddRange(from Dictionary<string, object> newFeature in deserializedPoints select new SJSonModel(newFeature));

                var mainRouteStr = new List<string>();
                var mainRouteShortStr = new List<string>();

                foreach (var point in myPoints)
                {
                    mainRouteStr.Add(point.FullName);
                    mainRouteShortStr.Add(point.ShortName);
                }

                trip.MainRouteStr = string.Join(";", mainRouteStr);
                trip.MainRouteShortStr = string.Join(";", mainRouteShortStr);
            }

            if (model.IsDriver)
            {
                trip.TripType = TripType.Driver;

                // генерируем всевозможные варианты маршрутов по этому пути точек
                for (var i = 0; i < myPoints.Count - 1; i++)
                {
                    // счетчик для стоимости маршрута
                    var xCost = Convert.ToInt32(costs[i]);
                    for (var j = i + 1; j < myPoints.Count; j++)
                    {
                        var route = new TripRoute
                        {
                            StartPointGid = myPoints[i].Gid,
                            StartPointFullName = myPoints[i].FullName,
                            StartPointShortName = myPoints[i].ShortName,
                            EndPointGid = myPoints[j].Gid,
                            EndPointFullName = myPoints[j].FullName,
                            EndPointShortName = myPoints[j].ShortName,
                            Cost = xCost
                        };

                        trip.TripRoute.Add(route);

                        if (j != myPoints.Count - 1)
                        {
                            xCost += Convert.ToInt32(costs[j]);
                        }
                    }
                }
            }
            else
            {
                trip.TripType = TripType.Passenger;

                // генерируем маршрут только из точки А в точку В
                trip.TripRoute.Add(new TripRoute
                    {
                        StartPointGid = myPoints.First().Gid,
                        StartPointFullName = myPoints.First().FullName,
                        StartPointShortName = myPoints.First().ShortName,
                        EndPointGid = myPoints.Last().Gid,
                        EndPointFullName = myPoints.Last().FullName,
                        EndPointShortName = myPoints.Last().ShortName,
                        Cost = 0
                    });
            }

            if (dateTo == null || model.IsDriver)
            {
                trip.TripDate.Add(new TripDate
                {
                    Date = dateAt,
                    IsDeleted = false
                });
            }
            else
            {
                for (var date = dateAt; date <= dateTo.Value; date = date.AddDays(1))
                {
                    trip.TripDate.Add(new TripDate
                    {
                        Date = date,
                        IsDeleted = false
                    });
                }
            }

            trip.Seats = model.SeatsNumber;
            trip.FreeSeats = model.SeatsNumber;
            trip.TripStatus = 1;
            trip.IsDeleted = false;

            _tripsService.Insert(trip);
            _tripsService.Save();

            return Json(true, JsonRequestBehavior.AllowGet);
        }