コード例 #1
0
        public ActionResult Create(NewPartnerCallViewModel m)
        {
            if (!m.ForOutdoor && !m.ForIndoor)
            {
                ModelState.AddModelError("For", "Your partner call must be for indoor, outdoor or both.");
            }

            if (ModelState.IsValid)
            {
                DateTime endDateTime;

                var startDateTime = DateTimeExtensions.ParseDateAndTime(m.StartDate, m.StartTime);
                DateTimeExtensions.TryParseDateAndTime(m.EndDate, m.EndTime, out endDateTime);

                var pc = pcSvc.CreatePartnerCall(new PartnerCall()
                {
                    Comment        = m.Comment, StartDateTime = startDateTime,
                    EndDateTime    = endDateTime, ForIndoor = m.ForIndoor, ForOutdoor = m.ForOutdoor, PlaceID = m.ParnterCallPlaceID,
                    PreferredLevel = (byte)m.PreferredLevel
                }
                                                 );

                if (!pcSvc.UserHasSubscriptionForRelatedGeo(m.ParnterCallPlaceID))
                {
                    var pcs = pcSvc.CreatePartnerCallSubscription(new PartnerCallSubscription()
                    {
                        ForIndoor      = true,
                        ForOutdoor     = true,
                        PlaceID        = m.ParnterCallPlaceID,
                        EmailRealTime  = true,
                        MobileRealTime = false,
                        ExactMatchOnly = false
                    });
                    //return RedirectToAction("SubscriptionSuggestion", new { id = m.ParnterCallPlaceID });
                }

                return(RedirectToAction("ListPlace", new { id = m.ParnterCallPlaceID }));
            }
            else
            {
                PrepareNewCallViewData(AppLookups.GetCacheIndexEntry(m.ParnterCallPlaceID));
                return(View("New"));
            }
        }
コード例 #2
0
        private NewPartnerCallViewModel PrepareNewCallViewData(CfCacheIndexEntry place)
        {
            var m = new NewPartnerCallViewModel()
            {
                ParnterCallPlaceID = place.ID, ForIndoor = true, ForOutdoor = true
            };

            if (place.Type == CfType.Country)
            {
                ViewBag.PlaceDisallowed = true;
                ViewBag.Place           = place;
            }
            else if (place.Type == CfType.Province)
            {
                var area = geoSvc.GetAreaByID(place.ID);

                ViewBag.PlaceDisallowed = true;
                ViewBag.Place           = place;

                ViewBag.InterectingAreas = geoSvc.GetIntersectingAreas(area).Where(a => a.Type != CfType.Province &&
                                                                                   !a.DisallowPartnerCalls).ToList();
            }
            else if (place.Type.ToPlaceCateogry() == PlaceCategory.Area)
            {
                ViewBag.PlaceType = "Area";
                var area = geoSvc.GetAreaByID(place.ID);
                ViewBag.Place = area;

                if (area.DisallowPartnerCalls)
                {
                    ViewBag.PlaceDisallowed = true;
                }
                else
                {
                    var geoJsonUrl = Stgs.MapSvcRelativeUrl + "area/" + place.ID.ToString();

                    var mapModel = new Bing7GeoJsonMapViewModel("climbing-map-" + place.ID, 680, 400, geoJsonUrl);
                    mapModel.ViewOptions = new Bing7MapViewOptionsViewModel(mappingSvc.GetBingViewByID(area.ID));
                    var mapItems = new MappingService().GetAreaEditMapItems(area);
                    ViewBag.MapItemsArea = mapItems.Items[0];
                    mapItems.Items.RemoveAt(0);
                    ViewBag.MapItemsLocations = mapItems.Items;
                    ViewBag.MapModel          = mapModel;
                }

                ViewBag.ChildLocations = geoSvc.GetGeoDeduciblePlaces(place).Where(p => p.Type.IsLocation());

                ViewBag.InterectingAreas = geoSvc.GetIntersectingAreas(area).Where(a => a.Type != CfType.Province &&
                                                                                   !a.DisallowPartnerCalls).ToList();
            }
            else if (place.Type.ToPlaceCateogry() == PlaceCategory.IndoorClimbing ||
                     place.Type.ToPlaceCateogry() == PlaceCategory.OutdoorClimbing)
            {
                ViewBag.PlaceType = "Location";
                var location = geoSvc.GetLocationByID(place.ID);
                ViewBag.Place = location;

                if (location.IsIndoorClimbing)
                {
                    m.ForOutdoor = false;
                }
                if (location.IsOutdoorClimbing)
                {
                    m.ForIndoor = false;
                }

                var mapModel = new Bing7MapWithLocationViewModel(location.NameUrlPart, 732, 340, location.Latitude,
                                                                 location.Longitude, location.AvatarRelativeUrl);

                var mapViewSettings = mappingSvc.GetBingViewByID(location.ID);
                if (mapViewSettings == default(PlaceBingMapView))
                {
                    mapViewSettings = PlaceBingMapView.GetDefaultIndoorSettings(location);
                }
                mapModel.ViewOptions    = new Bing7MapViewOptionsViewModel(mapViewSettings);
                ViewBag.LocationMapView = mapModel;

                ViewBag.InterectingAreas = geoSvc.GetIntersectingAreasOfPoint(location.Latitude, location.Longitude)
                                           .Where(a => a.Type != CfType.Province && !a.DisallowPartnerCalls).ToList();
            }
            else
            {
                throw new ArgumentException("Place type [" + place.Type.ToString() + "] not supported for partner calls");
            }

            return(m);
        }
コード例 #3
0
 public ActionResult Create(NewPartnerCallViewModel m)
 {
     //ViewBag.PartnerCalls = pcSvc.GetPlacesPartnerCalls(id);
     return(View());
 }