Exemple #1
0
        //
        // GET: /POI/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id > 0)
            {
                var poi = new POIManager().Get((int)id);
                if (poi != null)
                {
                    InitEditReferenceData(poi);

                    var refData = new POIBrowseModel();
                    ViewBag.ReferenceData    = refData;
                    ViewBag.HideAdvancedInfo = true;

                    try
                    {
                        var user = new UserManager().GetUser((int)Session["UserID"]);
                        if (POIManager.CanUserEditPOI(poi, user))
                        {
                            ViewBag.HideAdvancedInfo = false;
                        }
                    }
                    catch (Exception)
                    {
                        ;;  //user not signed in
                    }

                    //enable advanced edit options for full editors/admin
                    return(View(poi));
                }
            }

            //no applicable poi, jump back to browse
            return(RedirectToAction("Index", "POI"));
        }
        public async Task <ActionResult> Edit(int?id, bool createCopy = false)
        {
            ViewBag.IsReadOnlyMode = this.IsReadOnlyMode;

            if (id > 0)
            {
                ChargePoint poi = null;

                if (createCopy)
                {
                    //get version of POI with location details removed, copying equipment etc
                    poi = await new POIManager().GetCopy((int)id, true);
                }
                else
                {
                    poi = await new POIManager().Get((int)id);
                }

                if (poi != null)
                {
                    InitEditReferenceData(poi);

                    var refData = new POIBrowseModel(GetCoreReferenceData());
                    ViewBag.ReferenceData    = refData;
                    ViewBag.HideAdvancedInfo = true;

                    if (!createCopy)
                    {
                        try
                        {
                            var user = new UserManager().GetUser((int)UserID);
                            if (POIManager.CanUserEditPOI(poi, user))
                            {
                                ViewBag.HideAdvancedInfo = false;
                            }
                        }
                        catch (Exception)
                        {
                            ;;  //user not signed in
                        }
                    }

                    //enable advanced edit options for full editors/admin
                    return(View(poi));
                }
            }

            //no applicable poi, jump back to browse
            return(RedirectToAction("Index", "POI"));
        }
Exemple #3
0
        //[AuthSignedInOnly]
        public ActionResult Add()
        {
            var refData = new POIBrowseModel();

            refData.AllowOptionalCountrySelection = false;

            ViewBag.ReferenceData   = refData;
            ViewBag.ConnectionIndex = 0; //connection counter shared by equipment detais
            ViewBag.EnableEditView  = false;

            //get a default new POI using std core reference data
            var coreReferenceData = new ReferenceDataManager().GetCoreReferenceData();

            coreReferenceData.ChargePoint.OperatorInfo.ID        = 1;    // Unknown Operator
            coreReferenceData.ChargePoint.StatusType.ID          = 50;   //Operational
            coreReferenceData.ChargePoint.UsageType.ID           = 6;    //private for staff and visitors
            coreReferenceData.ChargePoint.SubmissionStatus       = null; //let system decide on submit
            coreReferenceData.ChargePoint.SubmissionStatusTypeID = null;
            return(View("Edit", coreReferenceData.ChargePoint));
        }
        public async Task <ActionResult> Index(POIBrowseModel filter)
        {
            if (filter?.ReferenceData == null)
            {
                if (filter == null)
                {
                    filter = new POIBrowseModel();
                    filter.ShowAdvancedOptions = true;
                }
                filter.ReferenceData = await GetCoreReferenceDataAsync();
            }

            var cpManager = new API.Common.POIManager();

            //dropdown selections of -1 represent an intended null selection, fix this by nulling relevant items
            filter.CountryIDs        = this.ConvertNullableSelection(filter.CountryIDs);
            filter.LevelIDs          = this.ConvertNullableSelection(filter.LevelIDs);
            filter.ConnectionTypeIDs = this.ConvertNullableSelection(filter.ConnectionTypeIDs);
            filter.OperatorIDs       = this.ConvertNullableSelection(filter.OperatorIDs);
            filter.StatusTypeIDs     = this.ConvertNullableSelection(filter.StatusTypeIDs);
            filter.UsageTypeIDs      = this.ConvertNullableSelection(filter.UsageTypeIDs);
            filter.DataProviderIDs   = this.ConvertNullableSelection(filter.DataProviderIDs);
            filter.IncludeComments   = true;

            if (IsRequestByRobot)
            {
                //force mirror db when browser is a robot
                filter.AllowMirrorDB    = true;
                filter.AllowDataStoreDB = false;
            }

            if (!String.IsNullOrWhiteSpace(filter.Country))
            {
                //TODO: cache country id lookup
                using (var refData = new OCM.API.Common.ReferenceDataManager())
                {
                    var countrySelected = refData.GetCountryByName(filter.Country);
                    if (countrySelected != null)
                    {
                        filter.CountryIDs = new int[] { countrySelected.ID };
                    }
                }
            }
            else
            {
                //default to UK
                // if (filter.CountryIDs == null) filter.CountryIDs = new int[] { 1 };
            }

            filter.MaxResults = 100;

            if (!String.IsNullOrWhiteSpace(filter.SearchLocation))
            {
                if (filter.SearchLocation.ToUpper().StartsWith("OCM-"))
                {
                    filter.SearchLocation = filter.SearchLocation.Replace("OCM-", "");
                }
                if (filter.SearchLocation.ToUpper().StartsWith("OCM"))
                {
                    filter.SearchLocation = filter.SearchLocation.Replace("OCM", "");
                }

                if (IsNumeric(filter.SearchLocation.Trim()))
                {
                    int poiID = -1;
                    //treat numbers as OCM ref
                    if (int.TryParse(filter.SearchLocation.Trim(), out poiID))
                    {
                        filter.ChargePointIDs = new int[] { poiID };
                    }
                }
                else
                {
                    //attempt to geocode
                    var    geocode           = new GeocodingHelper(_settings);
                    string searchCountryName = null;
                    if (filter.CountryIDs != null && filter.CountryIDs.Count() > 0)
                    {
                        var searchCountry = filter.ReferenceData.Countries.FirstOrDefault(c => c.ID == filter.CountryIDs[0]);
                        searchCountryName = searchCountry.Title;
                    }

                    API.Common.Model.Extended.GeocodingResult position = null;

                    // FIXME: geocoding is disabled, find an laternative service to use
                    //geocode.GeolocateAddressInfo_Google(filter.SearchLocation.Trim() + (searchCountryName != null ? ", " + searchCountryName : ""));

                    if (filter.SearchLocation.Contains(","))
                    {
                        var vals = filter.SearchLocation.Split(',');
                        if (IsNumeric(vals[0]) && IsNumeric(vals[1]))
                        {
                            position = new API.Common.Model.Extended.GeocodingResult
                            {
                                Latitude  = double.Parse(vals[0]),
                                Longitude = double.Parse(vals[1])
                            };
                        }
                    }
                    if (position != null)
                    {
                        filter.Latitude  = position.Latitude;
                        filter.Longitude = position.Longitude;
                        if (filter.Distance == null)
                        {
                            filter.Distance = 50;
                        }
                        filter.DistanceUnit = API.Common.Model.DistanceUnit.Miles;
                        //TODO: distance unit KM
                        //if (distanceunit == "km") searchfilters.DistanceUnit = API.Common.Model.DistanceUnit.KM;

                        ViewBag.FormattedAddress = position.Address ?? "";
                    }
                }
            }

            filter.POIList = (await cpManager.GetPOIListAsync((OCM.API.Common.APIRequestParams)filter, filter.ReferenceData)).ToList();
            return(View(filter));
        }
        public async Task <ActionResult> Edit(ChargePoint poi)
        {
            CheckForReadOnly();

            var refData = new POIBrowseModel(GetCoreReferenceData());

            refData.AllowOptionalCountrySelection = false;
            ViewBag.ReferenceData = refData;

            ViewBag.ConnectionIndex = 0; //connection counter shared by equipment details
            ViewBag.EnableEditView  = true;

            if (Request.Form["editoption"] == "addconnection")
            {
                //add a placeholder for new equipment details
                if (poi.Connections == null)
                {
                    poi.Connections = new List <API.Common.Model.ConnectionInfo>();
                }
                //TODO: setup defaults
                poi.Connections.Add(new API.Common.Model.ConnectionInfo());
                return(View(poi));
            }

            if (Request.Form["editoption"].ToString().StartsWith("remove-equipment"))
            {
                //TODO:remove requested connection
                //poi.Connections.Remove();
                string[] equipmentElementIDs = Request.Form["editoption"].ToString().Split('-');
                int      itemIndex           = int.Parse(equipmentElementIDs[2]);
                poi.Connections.RemoveAt(itemIndex);
                return(View(poi));
            }

            if (Request.Form["editoption"] == "preview")
            {
                //preview poi
                ViewBag.EnablePreviewMode = true;

                //reset any values provided as -1 to a standard default (unknown etc)
                PrepareDefaultsForBlankSelections(poi);

                //update preview of poi with fully populated reference data
                poi = new POIManager().PreviewPopulatedPOIFromModel(poi, refData.ReferenceData);

                InitEditReferenceData(poi);

                return(View(poi));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    User user = null;

                    if (IsUserSignedIn)
                    {
                        user = new UserManager().GetUser((int)UserID);
                    }

                    //reset any values provided as -1 to a standard default (unknown etc)
                    PrepareDefaultsForBlankSelections(poi);

                    if (poi.AddressInfo.Country == null || poi.AddressInfo.Country.ID == -1)
                    {
                        ModelState.AddModelError("Country", "Required");
                    }

                    //perform actual POI submission, then redirect to POI details if we can
                    var poiSubmissionResult = await new SubmissionManager().PerformPOISubmission(poi, user);
                    if (poiSubmissionResult.IsValid)
                    {
                        if (poiSubmissionResult.ItemId > 0)
                        {
                            return(RedirectToAction("Details", "POI", new { id = poiSubmissionResult.ItemId, status = "editsubmitted" }));
                        }
                        else
                        {
                            return(RedirectToAction("Index"));
                        }
                    }
                    else
                    {
                        ViewBag.ValidationFailed = true;
                        ModelState.AddModelError("Country", "Required");
                    }
                }
                catch
                {
                    //return View(poi);
                }
            }
            else
            {
                foreach (var modelState in ViewData.ModelState.Values)
                {
                    foreach (var error in modelState.Errors)
                    {
                        System.Diagnostics.Debug.WriteLine(error.ToString());
                    }
                }
            }

            ViewBag.ReferenceData = new POIBrowseModel(GetCoreReferenceData());

            return(View(poi));
        }
Exemple #6
0
        // GET: /POI/

        public ActionResult Index(POIBrowseModel filter)
        {
            if (filter == null)
            {
                filter = new POIBrowseModel();
                filter.ShowAdvancedOptions = true;
            }
            var cpManager = new API.Common.POIManager();

            //dropdown selections of -1 represent an intended null selection, fix this by nulling relevant items
            filter.CountryIDs        = this.ConvertNullableSelection(filter.CountryIDs);
            filter.LevelIDs          = this.ConvertNullableSelection(filter.LevelIDs);
            filter.ConnectionTypeIDs = this.ConvertNullableSelection(filter.ConnectionTypeIDs);
            filter.OperatorIDs       = this.ConvertNullableSelection(filter.OperatorIDs);
            filter.StatusTypeIDs     = this.ConvertNullableSelection(filter.StatusTypeIDs);
            filter.UsageTypeIDs      = this.ConvertNullableSelection(filter.UsageTypeIDs);
            filter.DataProviderIDs   = this.ConvertNullableSelection(filter.DataProviderIDs);
            filter.IncludeComments   = true;

            if (IsRequestByRobot)
            {
                //force mirror db when browser is a robot
                filter.AllowMirrorDB = true;
            }

            if (!String.IsNullOrWhiteSpace(filter.Country))
            {
                //TODO: cache country id lookup
                var countrySelected = new OCM.API.Common.ReferenceDataManager().GetCountryByName(filter.Country);
                if (countrySelected != null)
                {
                    filter.CountryIDs = new int[] { countrySelected.ID };
                }
            }
            else
            {
                //default to UK
                // if (filter.CountryIDs == null) filter.CountryIDs = new int[] { 1 };
            }

            filter.MaxResults = 100;

            if (!String.IsNullOrWhiteSpace(filter.SearchLocation))
            {
                if (filter.SearchLocation.ToUpper().StartsWith("OCM-"))
                {
                    filter.SearchLocation = filter.SearchLocation.Replace("OCM-", "");
                }
                if (filter.SearchLocation.ToUpper().StartsWith("OCM"))
                {
                    filter.SearchLocation = filter.SearchLocation.Replace("OCM", "");
                }

                if (IsNumeric(filter.SearchLocation.Trim()))
                {
                    int poiID = -1;
                    //treat numbers as OCM ref
                    if (int.TryParse(filter.SearchLocation.Trim(), out poiID))
                    {
                        filter.ChargePointIDs = new int[] { poiID };
                    }
                }
                else
                {
                    //attempt to geocode
                    var    geocode           = new GeocodingHelper();
                    string searchCountryName = null;
                    if (filter.CountryIDs != null && filter.CountryIDs.Count() > 0)
                    {
                        var searchCountry = filter.ReferenceData.Countries.FirstOrDefault(c => c.ID == filter.CountryIDs[0]);
                        searchCountryName = searchCountry.Title;
                    }

                    var position = geocode.GeolocateAddressInfo_Google(filter.SearchLocation.Trim() + (searchCountryName != null ? ", " + searchCountryName : ""));

                    if (position != null)
                    {
                        filter.Latitude  = position.Latitude;
                        filter.Longitude = position.Longitude;
                        if (filter.Distance == null)
                        {
                            filter.Distance = 50;
                        }
                        filter.DistanceUnit = API.Common.Model.DistanceUnit.Miles;
                        //TODO: distance unit KM
                        //if (distanceunit == "km") searchfilters.DistanceUnit = API.Common.Model.DistanceUnit.KM;

                        ViewBag.FormattedAddress = position.Address;
                    }
                }
            }

            filter.POIList = cpManager.GetChargePoints((OCM.API.Common.APIRequestParams)filter);
            return(View(filter));
        }
Exemple #7
0
        public ActionResult Edit(ChargePoint poi)
        {
            var refData = new POIBrowseModel();

            refData.AllowOptionalCountrySelection = false;
            ViewBag.ReferenceData = refData;

            ViewBag.ConnectionIndex = 0; //connection counter shared by equipment details
            ViewBag.EnableEditView  = true;

            if (Request["editoption"] == "addconnection")
            {
                //add a placeholder for new equipment details
                if (poi.Connections == null)
                {
                    poi.Connections = new List <ConnectionInfo>();
                }
                //TODO: setup defaults
                poi.Connections.Add(new ConnectionInfo());
                return(View(poi));
            }

            if (Request["editoption"].ToString().StartsWith("remove-equipment"))
            {
                //TODO:remove requested connection
                //poi.Connections.Remove();
                string[] equipmentElementIDs = Request["editoption"].ToString().Split('-');
                int      itemIndex           = int.Parse(equipmentElementIDs[2]);
                poi.Connections.RemoveAt(itemIndex);
                return(View(poi));
            }

            if (Request["editoption"] == "preview")
            {
                //preview poi
                ViewBag.EnablePreviewMode = true;
                //update preview of poi with fully populated reference data
                poi = new POIManager().PreviewPopulatedPOIFromModel(poi);

                InitEditReferenceData(poi);

                return(View(poi));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    User user = null;

                    if (IsUserSignedIn)
                    {
                        user = new UserManager().GetUser((int)Session["UserID"]);
                    }

                    //reset any values provided as -1 to a standard default (unknown etc)
                    //the binding method varies between hidden fields and dropdown values (FIXME)
                    if (poi.DataProvider != null && poi.DataProvider.ID > 0)
                    {
                        poi.DataProviderID = poi.DataProvider.ID;
                    }
                    if (poi.DataProviderID == -1 || poi.DataProviderID == null)
                    {
                        poi.DataProvider   = null;
                        poi.DataProviderID = (int)StandardDataProviders.OpenChargeMapContrib;
                    }

                    if (poi.OperatorInfo != null)
                    {
                        poi.OperatorID = poi.OperatorInfo.ID;
                    }
                    else
                    {
                        poi.OperatorID = (int)StandardOperators.UnknownOperator;
                    }

                    if (poi.UsageType != null)
                    {
                        poi.UsageTypeID = poi.UsageType.ID;
                    }
                    else
                    {
                        poi.UsageTypeID = (int)StandardUsageTypes.Unknown;
                    }

                    if (poi.StatusType != null && (poi.StatusTypeID == -1 || poi.StatusTypeID == null))
                    {
                        poi.StatusTypeID = poi.StatusType.ID;
                    }

                    if (poi.StatusTypeID == -1 || poi.StatusTypeID == null)
                    {
                        poi.StatusType   = null;
                        poi.StatusTypeID = (int)StandardStatusTypes.Unknown;
                    }

                    if (poi.SubmissionStatusTypeID == -1)
                    {
                        poi.SubmissionStatus       = null;
                        poi.SubmissionStatusTypeID = null;
                    }

                    if (poi.Connections != null)
                    {
                        foreach (var connection in poi.Connections)
                        {
                            if (connection.ConnectionTypeID == -1)
                            {
                                connection.ConnectionType   = null;
                                connection.ConnectionTypeID = (int)StandardConnectionTypes.Unknown;
                            }

                            if (connection.CurrentTypeID == -1)
                            {
                                connection.CurrentType   = null;
                                connection.CurrentTypeID = null;
                            }

                            if (connection.StatusTypeID == -1)
                            {
                                connection.StatusType   = null;
                                connection.StatusTypeID = (int)StandardStatusTypes.Unknown;
                            }

                            if (connection.LevelID == -1)
                            {
                                connection.Level   = null;
                                connection.LevelID = null;
                            }
                        }
                    }

                    if (poi.AddressInfo.Country == null || poi.AddressInfo.Country.ID == -1)
                    {
                        ModelState.AddModelError("Country", "Required");
                    }

                    //perform actual POI submission, then redirect to POI details if we can
                    int poiSubmissionID = new SubmissionManager().PerformPOISubmission(poi, user);
                    if (poiSubmissionID > -1)
                    {
                        if (poiSubmissionID > 0)
                        {
                            return(RedirectToAction("Details", "POI", new { id = poiSubmissionID, status = "editsubmitted" }));
                        }
                        else
                        {
                            return(RedirectToAction("Index"));
                        }
                    }
                    else
                    {
                        ViewBag.ValidationFailed = true;
                    }
                }
                catch
                {
                    //return View(poi);
                }
            }
            else
            {
                foreach (ModelState modelState in ViewData.ModelState.Values)
                {
                    foreach (ModelError error in modelState.Errors)
                    {
                        System.Diagnostics.Debug.WriteLine(error.ToString());
                    }
                }
            }

            ViewBag.ReferenceData = new POIBrowseModel();

            return(View(poi));
        }