Esempio n. 1
0
        public bool ProcessEquipmentSubmission(HttpContext context, ref OCM.API.Common.Model.ChargePoint cp)
        {
            System.IO.StreamReader sr = new System.IO.StreamReader(context.Request.InputStream);
            //TODO: handle encoding (UTF etc) correctly
            string responseContent = sr.ReadToEnd().Trim();

            string jsonString = responseContent;

            try
            {
                JObject o = JObject.Parse(jsonString);

                JsonSerializer serializer = new JsonSerializer();
                cp = (Common.Model.ChargePoint)serializer.Deserialize(new JTokenReader(o), typeof(Common.Model.ChargePoint));

                //validate cp submission

                if (POIManager.IsValid(cp))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine(exp);

                //submission failed
                return false;
            }
        }
Esempio n. 2
0
        public ActionResult EditUser(OCM.API.Common.Model.User userDetails)
        {
            if (ModelState.IsValid)
            {
                var userManager = new UserManager();

                //save
                if (userManager.UpdateUserProfile(userDetails, true))
                {
                    return RedirectToAction("Users");
                }
            }

            return View(userDetails);
        }
        public static void PerformCoreLogin(OCM.API.Common.Model.User userDetails)
        {
            string permissions = (userDetails.Permissions != null ? userDetails.Permissions : "");
            var session = System.Web.HttpContext.Current.Session;
            var response = new HttpResponseWrapper(System.Web.HttpContext.Current.Response);

            UpdateCookie(response, "IdentityProvider", userDetails.IdentityProvider);
            UpdateCookie(response, "Identifier", userDetails.Identifier);
            UpdateCookie(response, "Username", userDetails.Username);
            UpdateCookie(response, "OCMSessionToken", userDetails.CurrentSessionToken);
            UpdateCookie(response, "AccessPermissions", permissions);

            session["IdentityProvider"] = userDetails.IdentityProvider;
            session["Identifier"] = userDetails.Identifier;
            session["Username"] = userDetails.Username;
            session["UserID"] = userDetails.ID;

            if (UserManager.IsUserAdministrator(userDetails))
            {
                session["IsAdministrator"] = true;
            }
        }
 public DataQualityReport GetDataQualityReport(OCM.API.Common.Model.ChargePoint poi)
 {
     DataQualityReport report = new DataQualityReport();
     report.POIReports.Add(CheckPOIDataQuality(poi));
     return report;
 }
        /// <summary>
        /// For given POI, return data quality report and supporting analysis results
        /// </summary>
        /// <param name="poi"></param>
        /// <returns></returns>
        public POIDataQualityReport CheckPOIDataQuality(OCM.API.Common.Model.ChargePoint poi)
        {
            var report = new POIDataQualityReport();
            report.POI = poi;

            DateTime recentUpdateThreshold = DateTime.UtcNow.AddMonths(-6);

            if (
                (poi.DateLastConfirmed.HasValue && !(poi.DateLastConfirmed.Value > recentUpdateThreshold))
                ||
                (poi.UserComments!=null && poi.UserComments.Any(u=>u.CheckinStatusType!=null && u.CheckinStatusType.IsPositive==true && u.DateCreated>recentUpdateThreshold))
                ||
                (poi.MediaItems != null && poi.MediaItems.Any(u => u.DateCreated > recentUpdateThreshold))
                )
            {
                //has either a recent datelastconfirmed value or a recent positive checkin
                report.ReportItems.Add(new DataQualityReportItem { Category = "User Feedback", Comment = "Has recent user verification", IsPositive = true });
            }
            else
            {
                //low quality score for date last confirmed
                report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "User Feedback", Comment = "No recent user verification.", IsPositive = false });
            }

            if (poi.UserComments == null || (poi.UserComments != null && !poi.UserComments.Any()))
            {
                //low quality score for comments
                report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "User Feedback", Comment = "No comments or check-ins", IsPositive = false });
            }
            else
            {
                report.ReportItems.Add(new DataQualityReportItem { Category = "User Feedback", Comment = "Has comments or check-ins", IsPositive = true });
            }

            if (poi.MediaItems == null || (poi.MediaItems != null && !poi.MediaItems.Any()))
            {
                //low quality score for photos
                report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "User Feedback", Comment = "No photos", IsPositive = false });
            }
            else
            {
                report.ReportItems.Add(new DataQualityReportItem { Category = "User Feedback", Comment = "Has photos", IsPositive = true });
            }

            if (poi.UsageTypeID == null || (poi.UsageTypeID != null && poi.UsageType.ID == 0))
            {
                //low quality score for usage type
                report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "Data Completeness", Comment = "Unknown Usage Type", IsPositive = false });
            }
            else
            {
                report.ReportItems.Add(new DataQualityReportItem { Category = "Data Completeness", Comment = "Usage Type Known", IsPositive = true });
            }
            if (poi.StatusType == null || (poi.StatusType != null && poi.StatusType.ID == 0))
            {
                //low quality score for status type
                report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "Data Completeness", Comment = "Unknown Operational Status", IsPositive = false });
            }
            else
            {
                report.ReportItems.Add(new DataQualityReportItem { Category = "Data Completeness", Comment = "Operational Status Known", IsPositive = true });
            }

            if (poi.Connections == null || !poi.Connections.Any())
            {
                report.ReportItems.Add(new DataQualityReportItem { Weighting = 50, Category = "Data Completeness", Comment = "No Equipment Details", IsPositive = false });
            }
            else
            {
                report.ReportItems.Add(new DataQualityReportItem { Category = "Data Completeness", Comment = "Equipment Details Present", IsPositive = true });
            }

            //data quality score starts at 5 (excellent) and is reduced towards 0 for each data issue

            double totalPoints = 100;
            foreach (var p in report.ReportItems.Where(r => r.IsPositive == false))
            {
                totalPoints -= p.Weighting;
            }
            if (totalPoints < 0) totalPoints = 0;
            report.DataQualityScore = totalPoints;

            return report;
        }
        public ActionResult Register(OCM.API.Common.Model.RegistrationModel model)
        {
            if (ModelState.IsValid)
            {
                //register as new user, check email is valid first
                var userManager = new UserManager();
                var user = userManager.RegisterNewUser(model);

                if (user != null)
                {
                    return RedirectToAction("BeginLogin", "LoginProvider");
                }
                else
                {
                    model.RegistrationFailed = true;
                }
            }

            return View(model);
        }
 public ActionResult PasswordReset(OCM.API.Common.Model.PasswordResetRequestModel model)
 {
     if (ModelState.IsValid)
     {
         //send confirmation email
         bool resetInitiated = new UserManager().BeginPasswordReset(model.EmailAddress);
         if (resetInitiated)
         {
             model.ResetInitiated = true;
         }
         else
         {
             model.ResetInitiated = false;
             model.IsUnknownAccount = true;
         }
     }
     return View(model);
 }
        public ActionResult BeginLogin(OCM.API.Common.Model.LoginModel loginModel)
        {
            if (ModelState.IsValid)
            {
                var userManager = new UserManager();

                try
                {
                    var user = userManager.GetUser(loginModel);
                    if (user != null)
                    {
                        return ProcessLoginResult(user.Identifier, user.IdentityProvider, user.Username, user.EmailAddress);
                    }
                    else
                    {
                        ViewBag.InvalidLogin = true;
                    }
                }
                catch (UserManager.PasswordNotSetException)
                {
                    return RedirectToAction("PasswordReset", new { emailAddress = loginModel.EmailAddress });
                }
            }

            ViewBag.LoginProviders = OAuthWebSecurity.RegisteredClientData;
            return View(loginModel);
        }
Esempio n. 9
0
        public OCM.Core.Data.ChargePoint PopulateChargePoint_SimpleToData(Model.ChargePoint simplePOI, OCM.Core.Data.OCMEntities dataModel)
        {
            var dataPOI = new OCM.Core.Data.ChargePoint();

            if (simplePOI.ID > 0 && simplePOI.UUID != null) dataPOI = dataModel.ChargePoints.FirstOrDefault(cp => cp.ID == simplePOI.ID && cp.UUID.ToUpper() == simplePOI.UUID.ToUpper());// dataChargePoint.ID = simpleChargePoint.ID; // dataModel.ChargePoints.FirstOrDefault(c => c.ID == simpleChargePoint.ID);

            if (String.IsNullOrEmpty(dataPOI.UUID)) dataPOI.UUID = Guid.NewGuid().ToString().ToUpper();

            //if required, set the parent charge point id
            if (simplePOI.ParentChargePointID != null)
            {
                //dataChargePoint.ParentChargePoint = dataModel.ChargePoints.FirstOrDefault(c=>c.ID==simpleChargePoint.ParentChargePointID);
                dataPOI.ParentChargePointID = simplePOI.ParentChargePointID;
            }
            else
            {
                dataPOI.ParentChargePoint = null;
                dataPOI.ParentChargePointID = null;
            }

            if (simplePOI.DataProviderID > 0 || (simplePOI.DataProvider != null && simplePOI.DataProvider.ID >= 0))
            {
                int providerId = (simplePOI.DataProviderID != null ? (int)simplePOI.DataProviderID : simplePOI.DataProvider.ID);
                try
                {
                    dataPOI.DataProvider = dataModel.DataProviders.First(d => d.ID == providerId);
                    dataPOI.DataProviderID = dataPOI.DataProvider.ID;
                }
                catch (Exception exp)
                {
                    //unknown operator
                    throw new OCMAPIException("Unknown Data Provider Specified:"+providerId+" "+exp.ToString());
                }
            }
            else
            {
                //set to ocm contributor by default
                dataPOI.DataProvider = dataModel.DataProviders.First(d => d.ID == (int)StandardDataProviders.OpenChargeMapContrib);
                dataPOI.DataProviderID = dataPOI.DataProvider.ID;
            }

            dataPOI.DataProvidersReference = simplePOI.DataProvidersReference;

            if (simplePOI.OperatorID >= 1 || (simplePOI.OperatorInfo != null && simplePOI.OperatorInfo.ID >= 0))
            {
                int operatorId = (simplePOI.OperatorID != null ? (int)simplePOI.OperatorID : simplePOI.OperatorInfo.ID);
                try
                {
                    dataPOI.Operator = dataModel.Operators.First(o => o.ID == operatorId);
                    dataPOI.OperatorID = dataPOI.Operator.ID;
                }
                catch (Exception)
                {
                    //unknown operator
                    throw new OCMAPIException("Unknown Network Operator Specified:"+operatorId);
                }
            }
            else
            {
                dataPOI.Operator = null;
                dataPOI.OperatorID = null;
            }

            dataPOI.OperatorsReference = simplePOI.OperatorsReference;

            if (simplePOI.UsageTypeID >= 0 || (simplePOI.UsageType != null && simplePOI.UsageType.ID >= 0))
            {
                int usageTypeId = (simplePOI.UsageTypeID != null ? (int)simplePOI.UsageTypeID : simplePOI.UsageType.ID);
                try
                {
                    dataPOI.UsageType = dataModel.UsageTypes.First(u => u.ID == usageTypeId);
                    dataPOI.UsageTypeID = dataPOI.UsageType.ID;
                }
                catch (Exception)
                {
                    //unknown usage type
                    throw new OCMAPIException("Unknown Usage Type Specified:"+usageTypeId);
                }
            }
            else
            {
                dataPOI.UsageType = null;
                dataPOI.UsageTypeID = null;
            }

            if (dataPOI.AddressInfo == null && simplePOI.AddressInfo.ID > 0)
            {
                var addressInfo = dataModel.ChargePoints.FirstOrDefault(cp => cp.ID == simplePOI.ID).AddressInfo;
                if (addressInfo.ID == simplePOI.AddressInfo.ID) dataPOI.AddressInfo = addressInfo;
            }
            dataPOI.AddressInfo = PopulateAddressInfo_SimpleToData(simplePOI.AddressInfo, dataPOI.AddressInfo, dataModel);

            dataPOI.NumberOfPoints = simplePOI.NumberOfPoints;
            dataPOI.GeneralComments = simplePOI.GeneralComments;
            dataPOI.DatePlanned = simplePOI.DatePlanned;
            dataPOI.UsageCost = simplePOI.UsageCost;

            if (simplePOI.DateLastStatusUpdate != null)
            {
                dataPOI.DateLastStatusUpdate = DateTime.UtcNow;
            }
            else
            {
                dataPOI.DateLastStatusUpdate = DateTime.UtcNow;
            }

            if (simplePOI.DataQualityLevel != null && simplePOI.DataQualityLevel > 0)
            {
                if (simplePOI.DataQualityLevel > 5) simplePOI.DataQualityLevel = 5;
                dataPOI.DataQualityLevel = simplePOI.DataQualityLevel;
            }
            else
            {
                dataPOI.DataQualityLevel = 1;
            }

            if (simplePOI.DateCreated != null)
            {
                dataPOI.DateCreated = simplePOI.DateCreated;
            }
            else
            {
                if (dataPOI.DateCreated == null) dataPOI.DateCreated = DateTime.UtcNow;
            }

            var updateConnectionList = new List<OCM.Core.Data.ConnectionInfo>();
            var deleteList = new List<OCM.Core.Data.ConnectionInfo>();

            if (simplePOI.Connections != null)
            {
                foreach (var c in simplePOI.Connections)
                {
                    var connectionInfo = new Core.Data.ConnectionInfo();

                    //edit existing, if required
                    if (c.ID > 0) connectionInfo = dataModel.ConnectionInfoList.FirstOrDefault(con => con.ID == c.ID && con.ChargePointID == dataPOI.ID);
                    if (connectionInfo == null)
                    {
                        //connection is stale info, start new
                        c.ID = 0;
                        connectionInfo = new Core.Data.ConnectionInfo();
                    }

                    connectionInfo.Reference = c.Reference;
                    connectionInfo.Comments = c.Comments;
                    connectionInfo.Amps = c.Amps;
                    connectionInfo.Voltage = c.Voltage;
                    connectionInfo.Quantity = c.Quantity;
                    connectionInfo.PowerKW = c.PowerKW;

                    if (c.ConnectionTypeID >= 0 || (c.ConnectionType != null && c.ConnectionType.ID >= 0))
                    {
                        int connectionTypeId = (c.ConnectionTypeID != null ? (int)c.ConnectionTypeID : c.ConnectionType.ID);
                        try
                        {
                            connectionInfo.ConnectionType = dataModel.ConnectionTypes.First(ct => ct.ID == connectionTypeId);
                            connectionInfo.ConnectionTypeID = connectionInfo.ConnectionType.ID;
                        }
                        catch (Exception)
                        {
                            throw new OCMAPIException("Unknown Connection Type Specified");
                        }
                    }
                    else
                    {
                        connectionInfo.ConnectionType = null;
                        connectionInfo.ConnectionTypeID = 0;
                    }

                    if (c.LevelID >= 1 || (c.Level != null && c.Level.ID >= 1))
                    {
                        int levelId = (c.LevelID != null ? (int)c.LevelID : c.Level.ID);
                        try
                        {
                            connectionInfo.ChargerType = dataModel.ChargerTypes.First(chg => chg.ID == levelId);
                            connectionInfo.LevelTypeID = connectionInfo.ChargerType.ID;
                        }
                        catch (Exception)
                        {
                            throw new OCMAPIException("Unknown Charger Level Specified");
                        }
                    }
                    else
                    {
                        connectionInfo.ChargerType = null;
                        connectionInfo.LevelTypeID = null;
                    }

                    if (c.CurrentTypeID >= 10 || (c.CurrentType != null && c.CurrentType.ID >= 10))
                    {
                        int currentTypeId = (c.CurrentTypeID != null ? (int)c.CurrentTypeID : c.CurrentType.ID);
                        try
                        {
                            connectionInfo.CurrentType = dataModel.CurrentTypes.First(chg => chg.ID == currentTypeId);
                            connectionInfo.CurrentTypeID = connectionInfo.CurrentType.ID;
                        }
                        catch (Exception)
                        {
                            throw new OCMAPIException("Unknown Current Type Specified");
                        }
                    }
                    else
                    {
                        connectionInfo.CurrentType = null;
                        connectionInfo.CurrentTypeID = null;
                    }

                    if (c.StatusTypeID >= 0 || (c.StatusType != null && c.StatusType.ID >= 0))
                    {
                        int statusTypeId = (c.StatusTypeID != null ? (int)c.StatusTypeID : c.StatusType.ID);
                        try
                        {
                            connectionInfo.StatusType = dataModel.StatusTypes.First(s => s.ID == statusTypeId);
                            connectionInfo.StatusTypeID = connectionInfo.StatusType.ID;
                        }
                        catch (Exception)
                        {
                            throw new OCMAPIException("Unknown Status Type Specified");
                        }
                    }
                    else
                    {
                        connectionInfo.StatusType = null;
                        connectionInfo.StatusTypeID = null;
                    }

                    bool addConnection = false;

                    //detect if connection details are non-blank/unknown before adding
                    if (
                        !String.IsNullOrEmpty(connectionInfo.Reference)
                        || !String.IsNullOrEmpty(connectionInfo.Comments)
                        || connectionInfo.Amps != null
                        || connectionInfo.Voltage != null
                        || connectionInfo.PowerKW != null
                        || (connectionInfo.ConnectionType != null && connectionInfo.ConnectionType.ID > 0)
                        || (connectionInfo.StatusType != null && connectionInfo.StatusTypeID > 0)
                        || (connectionInfo.ChargerType != null && connectionInfo.ChargerType.ID > 1)
                        || (connectionInfo.CurrentType != null && connectionInfo.CurrentType.ID > 0)
                        || (connectionInfo.Quantity != null && connectionInfo.Quantity > 1)
                    )
                    {
                        addConnection = true;
                        if (connectionInfo.ChargePoint == null) connectionInfo.ChargePoint = dataPOI;
                    }

                    if (addConnection)
                    {
                        //if adding a new connection (not an update) add to model
                        if (c.ID <= 0 || dataPOI.Connections.Count == 0)
                        {
                            dataPOI.Connections.Add(connectionInfo);
                        }
                        //track final list of connections being added/updated  -- will then be used to delete by difference
                        updateConnectionList.Add(connectionInfo);
                    }
                    else
                    {
                        //remove an existing connection no longer required
                        //if (c.ID > 0)
                        {
                            if (connectionInfo.ChargePoint == null) connectionInfo.ChargePoint = dataPOI;
                            deleteList.Add(connectionInfo);
                            //dataChargePoint.Connections.Remove(connectionInfo);
                        }
                    }
                }
            }

            //find existing connections not in updated/added list, add to delete
            if (dataPOI.Connections != null)
            {
                foreach (var con in dataPOI.Connections)
                {
                    if (!updateConnectionList.Contains(con))
                    {
                        if (!deleteList.Contains(con))
                        {
                            deleteList.Add(con);
                        }
                    }
                }
            }

            //finally clean up deleted items
            foreach (var item in deleteList)
            {
                if (item.ID > 0)
                {
                    dataModel.ConnectionInfoList.Remove(item);
                }
            }

            if (dataPOI.MetadataValues == null)
            {
                dataPOI.MetadataValues = new List<OCM.Core.Data.MetadataValue>();
                //add metadata values
            }

            if (simplePOI.MetadataValues != null)
            {
                foreach (var m in simplePOI.MetadataValues)
                {
                    var existingValue = dataPOI.MetadataValues.FirstOrDefault(v => v.ID == m.ID);
                    if (existingValue != null)
                    {
                        existingValue.ItemValue = m.ItemValue;
                    }
                    else
                    {
                        var newValue = new OCM.Core.Data.MetadataValue()
                        {
                            ChargePointID = dataPOI.ID,
                            ItemValue = m.ItemValue,
                            MetadataFieldID = m.MetadataFieldID,
                            MetadataField = dataModel.MetadataFields.FirstOrDefault(f => f.ID == m.MetadataFieldID)
                        };
                        dataPOI.MetadataValues.Add(newValue);
                    }
                }
            }

            //TODO:clean up unused metadata values

            if (simplePOI.StatusTypeID != null || simplePOI.StatusType != null)
            {
                if (simplePOI.StatusTypeID == null && simplePOI.StatusType != null) simplePOI.StatusTypeID = simplePOI.StatusType.ID;
                dataPOI.StatusTypeID = simplePOI.StatusTypeID;
                dataPOI.StatusType = dataModel.StatusTypes.FirstOrDefault(s => s.ID == simplePOI.StatusTypeID);
            }
            else
            {
                dataPOI.StatusType = null;
                dataPOI.StatusTypeID = null;
            }

            if (simplePOI.SubmissionStatusTypeID != null || simplePOI.SubmissionStatus != null)
            {
                if (simplePOI.SubmissionStatusTypeID == null & simplePOI.SubmissionStatus != null) simplePOI.SubmissionStatusTypeID = simplePOI.SubmissionStatus.ID;
                dataPOI.SubmissionStatusType = dataModel.SubmissionStatusTypes.First(s => s.ID == simplePOI.SubmissionStatusTypeID);
                dataPOI.SubmissionStatusTypeID = simplePOI.SubmissionStatusTypeID;
            }
            else
            {
                dataPOI.SubmissionStatusTypeID = null;
                dataPOI.SubmissionStatusType = null; // dataModel.SubmissionStatusTypes.First(s => s.ID == (int)StandardSubmissionStatusTypes.Submitted_UnderReview);
            }

            return dataPOI;
        }
Esempio n. 10
0
        public Model.User GetUser(OCM.API.Common.Model.LoginModel loginModel)
        {
            if (!String.IsNullOrEmpty(loginModel.EmailAddress))
            {
                var user = dataModel.Users.FirstOrDefault(u => u.EmailAddress.ToLower() == loginModel.EmailAddress.ToLower());

                if (user != null)
                {
                    if (String.IsNullOrEmpty(user.PasswordHash)) throw new PasswordNotSetException();

                    if (IsCorrectPassword(user.PasswordHash, loginModel.Password))
                    {
                        return Model.Extensions.User.FromDataModel(user);
                    }
                }
            }

            return null;
        }
        public bool ProcessEquipmentSubmission(HttpContext context, ref OCM.API.Common.Model.ChargePoint cp)
        {
            return false; //html input provider no longer supported

            /*
            //construct simple model view of new CP based on input, to then be used to contruct data model version
            cp.AddressInfo = new Common.Model.AddressInfo();

            cp.AddressInfo.Title = ParseString(context.Request["ocm_loc_title"]);
            cp.AddressInfo.AddressLine1 = ParseString(context.Request["ocm_loc_addressline1"]);
            cp.AddressInfo.AddressLine2 = ParseString(context.Request["ocm_loc_addressline2"]);
            cp.AddressInfo.Town = ParseString(context.Request["ocm_loc_town"]);
            cp.AddressInfo.StateOrProvince = ParseString(context.Request["ocm_loc_stateorprovince"]);
            cp.AddressInfo.Postcode = ParseString(context.Request["ocm_loc_postcode"]);

            cp.AddressInfo.Latitude = (double)ParseDouble(context.Request["ocm_loc_latitude"]);
            cp.AddressInfo.Longitude = (double)ParseDouble(context.Request["ocm_loc_longitude"]);

            int? countryID = ParseInt(context.Request["ocm_loc_countryid"]);
            if (countryID != null) cp.AddressInfo.Country = new Common.Model.Country() { ID = (int)countryID };

            cp.AddressInfo.AccessComments = ParseLongString(context.Request["ocm_loc_accesscomments"]);
            cp.AddressInfo.ContactTelephone1 = ParseString(context.Request["ocm_loc_contacttelephone1"]);
            cp.AddressInfo.ContactEmail = ParseString(context.Request["ocm_loc_contactemail"]);

            //build connection info list
            //connection 1 to n

            cp.Connections = new List<Common.Model.ConnectionInfo>();
            for (int i = 1; i <= 2; i++)
            {
                var connectionInfo = new Common.Model.ConnectionInfo();

                int? connectionTypeID = ParseInt(context.Request["ocm_cp_connection" + i + "_type"]);
                if (connectionTypeID != null)
                {
                    //TODO: remove/retire or remove entity reference for reference data lookup
                    var connectionType = new OCM.Core.Data.OCMEntities().ConnectionTypes.First(ct => ct.ID == (int)connectionTypeID);
                    connectionInfo.ConnectionType = OCM.API.Common.Model.Extensions.ConnectionType.FromDataModel(connectionType);
                }

                int? chargerLevelID = ParseInt(context.Request["ocm_cp_connection" + i + "_level"]);
                if (chargerLevelID != null)
                {
                    connectionInfo.Level = new Common.Model.ChargerType() { ID = (int)chargerLevelID };
                }

                connectionInfo.Amps = ParseInt(context.Request["ocm_cp_connection" + i + "_amps"]);
                connectionInfo.Voltage = ParseInt(context.Request["ocm_cp_connection" + i + "_volts"]);

                if (connectionInfo != null)
                {
                    cp.Connections.Add(connectionInfo);
                }
            }

            cp.NumberOfPoints = ParseInt(context.Request["ocm_cp_numberofpoints"]);

            int? usageTypeID = ParseInt(context.Request["ocm_cp_usagetype"]);
            if (usageTypeID != null)
            {
                cp.UsageType = new Common.Model.UsageType() { ID = (int)usageTypeID };
            }

            cp.UsageCost = ParseString(context.Request["ocm_cp_usagecost"]);

            int? statusTypeID = ParseInt(context.Request["ocm_cp_statustype"]);
            if (statusTypeID != null)
            {
                cp.StatusType = new Common.Model.StatusType() { ID = (int)statusTypeID };
            }

            cp.GeneralComments = ParseLongString(context.Request["ocm_cp_generalcomments"]);

            return true;
             * */
        }