private OBJECTIVE_POINT BuildOP(OPModel newObjPt)
        {
            OBJECTIVE_POINT newOP = new OBJECTIVE_POINT();

            if (newObjPt.OBJECTIVE_POINT_ID > 0)
            {
                newOP.OBJECTIVE_POINT_ID = newObjPt.OBJECTIVE_POINT_ID;
            }

            newOP.NAME        = newObjPt.NAME;
            newOP.DESCRIPTION = newObjPt.DESCRIPTION;
            if (newObjPt.ELEV_FT.HasValue)
            {
                var radio = Convert.ToString(Request.Form["ElevationUnit"]);
                //elevation is stored in ft, do conversion if == meter
                if (radio == "meter")
                {
                    decimal converted = Convert.ToDecimal(newObjPt.ELEV_FT) * 3.2808M;
                    newOP.ELEV_FT = Math.Round(converted, 3);
                }
                else
                {
                    newOP.ELEV_FT = newObjPt.ELEV_FT;
                }
            }
            newOP.DATE_ESTABLISHED = newObjPt.DATE_ESTABLISHED;
            newOP.OP_IS_DESTROYED  = newObjPt.OP_IS_DESTROYED == null ? 0 : newObjPt.OP_IS_DESTROYED;
            newOP.OP_NOTES         = newObjPt.OP_NOTES;
            newOP.SITE_ID          = newObjPt.SITE_ID;
            newOP.VDATUM_ID        = newObjPt.VDATUM_ID;
            newOP.LATITUDE_DD      = newObjPt.LATITUDE_DD;
            //make sure it's neg
            newOP.LONGITUDE_DD = newObjPt.LONGITUDE_DD.Value < 0 ? newObjPt.LONGITUDE_DD.Value : newObjPt.LONGITUDE_DD.Value * (-1);
            //and that it's only 6 dec places
            newOP.LONGITUDE_DD       = Math.Round(newOP.LONGITUDE_DD.Value, 6);
            newOP.HDATUM_ID          = newObjPt.HDATUM_ID;
            newOP.HCOLLECT_METHOD_ID = newObjPt.HCOLLECT_METHOD_ID;
            newOP.VCOLLECT_METHOD_ID = newObjPt.VCOLLECT_METHOD_ID;
            newOP.OP_TYPE_ID         = newObjPt.OP_TYPE_ID;
            newOP.DATE_RECOVERED     = newObjPt.DATE_RECOVERED;
            if (newObjPt.UNCERTAINTY > 0)
            {
                var rad = Convert.ToString(Request.Form["UncertainUnit"]);
                if (rad == "cm")
                {
                    decimal convertedV = Convert.ToDecimal(newObjPt.UNCERTAINTY) / 30.48M;
                    newOP.UNCERTAINTY = Math.Round(convertedV, 3);
                }
                else
                {
                    newOP.UNCERTAINTY = newObjPt.UNCERTAINTY;
                }
            }

            newOP.UNQUANTIFIED  = newObjPt.UNQUANTIFIED;
            newOP.OP_QUALITY_ID = newObjPt.OP_QUALITY_ID;

            return(newOP);
        }
        public ActionResult ObjPointCreate(OPModel newObjPt, string Create)
        {
            try
            {
                OBJECTIVE_POINT newOP = BuildOP(newObjPt);

                STNServiceCaller serviceCaller = STNServiceCaller.Instance;
                var request = new RestRequest(Method.POST);
                request.Resource      = "/ObjectivePoints";
                request.RequestFormat = DataFormat.Xml;
                request.AddHeader("Content-Type", "application/xml");

                //use extended serializer
                STNWebSerializer serializer = new STNWebSerializer();
                request.AddParameter("application/xml", serializer.Serialize <OBJECTIVE_POINT>(newOP), ParameterType.RequestBody);
                OBJECTIVE_POINT createdOP = serviceCaller.Execute <OBJECTIVE_POINT>(request);

                //post ControlIdentifiers if some were chosen
                if (newObjPt.OPIdentifiers != null)
                {
                    if (newObjPt.OPIdentifiers.Count >= 1)
                    {
                        foreach (OP_CONTROL_IDENTIFIER opCI in newObjPt.OPIdentifiers)
                        {
                            //post each one for this OP
                            request          = new RestRequest(Method.POST);
                            request.Resource = "ObjectivePoints/{objectivePointId}/AddOPControls";
                            request.AddParameter("objectivePointId", createdOP.OBJECTIVE_POINT_ID, ParameterType.UrlSegment);
                            request.RequestFormat = DataFormat.Xml;
                            request.AddHeader("Content-Type", "application/xml");
                            serializer = new STNWebSerializer();
                            request.AddParameter("application/xml", serializer.Serialize <OP_CONTROL_IDENTIFIER>(opCI), ParameterType.RequestBody);
                            serviceCaller.Execute <OP_CONTROL_IDENTIFIER>(request);
                        }
                    }
                }
                string siteId = newObjPt.SITE_ID.ToString();
                //determine which submit button was selected
                if (Create == "Submit &\r\nAdd Another OP") //Submit & Add Another OP
                {
                    return(RedirectToAction("ObjPointCreate", "ObjPoints", new { siteID = siteId }));
                }
                else if (Create == "Submit &\r\nAdd Upload File")
                {
                    return(RedirectToAction("FileCreate", "Files", new { Id = createdOP.OBJECTIVE_POINT_ID, aPage = "OP" }));
                }
                else if (Create == "Submit &\r\nDeploy Sensor") // Submit & Deploy Sensor
                {
                    return(RedirectToAction("Create", "Instruments", new { siteID = siteId }));
                }
                else if (Create == "Submit\r\n& Add HWM") //Submit & Add HWM
                {
                    return(RedirectToAction("Create", "HWMs", new { siteID = siteId }));
                }
                else //just Submit
                {
                    return(RedirectToAction("Details", "Sites", new { id = siteId }));
                }
            }
            catch (Exception e)
            {
                return(View("../Shared/Error", e));
            }
        }
        public ActionResult ObjPointEdit(int id, OPModel anObjPtM)
        {
            try
            {
                OBJECTIVE_POINT editedOP = BuildOP(anObjPtM);

                STNServiceCaller serviceCaller = STNServiceCaller.Instance;
                var request = new RestRequest(Method.POST);

                request.Resource      = "/ObjectivePoints/{entityId}";
                request.RequestFormat = DataFormat.Xml;
                request.AddParameter("entityId", id, ParameterType.UrlSegment);
                request.AddHeader("X-HTTP-Method-Override", "PUT");
                request.AddHeader("Content-Type", "application/xml");
                //Use extended serializer
                STNWebSerializer serializer = new STNWebSerializer();
                request.AddParameter("application/xml", serializer.Serialize <OBJECTIVE_POINT>(editedOP), ParameterType.RequestBody);
                OBJECTIVE_POINT anObjPoint = serviceCaller.Execute <OBJECTIVE_POINT>(request);

                if (anObjPtM.OPIdentifiers != null)
                {
                    foreach (OP_CONTROL_IDENTIFIER opi in anObjPtM.OPIdentifiers)
                    {
                        //if it has an id, it's a PUT
                        if (opi.OP_CONTROL_IDENTIFIER_ID == 0)
                        {
                            //POST it
                            request          = new RestRequest(Method.POST);
                            request.Resource = "ObjectivePoints/{objectivePointId}/AddOPControls";
                            request.AddParameter("objectivePointId", editedOP.OBJECTIVE_POINT_ID, ParameterType.UrlSegment);
                            request.RequestFormat = DataFormat.Xml;
                            request.AddHeader("Content-Type", "application/xml");
                            serializer = new STNWebSerializer();
                            request.AddParameter("application/xml", serializer.Serialize <OP_CONTROL_IDENTIFIER>(opi), ParameterType.RequestBody);
                            serviceCaller.Execute <OP_CONTROL_IDENTIFIER>(request);
                        }
                        else
                        {
                            //PUT it
                            opi.OBJECTIVE_POINT_ID = editedOP.OBJECTIVE_POINT_ID;
                            request               = new RestRequest(Method.POST);
                            request.Resource      = "/OPControlIdentifiers/{entityId}";
                            request.RequestFormat = DataFormat.Xml;
                            request.AddParameter("entityId", opi.OP_CONTROL_IDENTIFIER_ID, ParameterType.UrlSegment);
                            request.AddHeader("X-HTTP-Method-Override", "PUT");
                            request.AddHeader("Content-Type", "application/xml");
                            //Use extended serializer
                            serializer = new STNWebSerializer();
                            request.AddParameter("application/xml", serializer.Serialize <OP_CONTROL_IDENTIFIER>(opi), ParameterType.RequestBody);
                            serviceCaller.Execute <OP_CONTROL_IDENTIFIER>(request);
                        }
                    }
//                    List<decimal> identifiersExisted = anObjPtM.IdentifiersIds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => Convert.ToDecimal(x)).ToList();
                }

                //remove these
                if (!string.IsNullOrEmpty(anObjPtM.IdentifiersToRemove))
                {
                    List <decimal> identifiersRemoving = anObjPtM.IdentifiersToRemove.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => Convert.ToDecimal(x)).ToList();
                    foreach (decimal identifierID in identifiersRemoving)
                    {
                        //DELETE
                        request          = new RestRequest(Method.POST);
                        request.Resource = "/OPControlIdentifiers/{entityId}";
                        request.AddParameter("entityId", identifierID, ParameterType.UrlSegment);
                        request.AddHeader("X-HTTP-Method-Override", "DELETE");
                        request.AddHeader("Content-Type", "application/xml");

                        serviceCaller.Execute <OP_CONTROL_IDENTIFIER>(request);
                    }
                }

                return(RedirectToAction("ObjPointDetailsPV", new { id = editedOP.OBJECTIVE_POINT_ID }));
            }
            catch (Exception e)
            {
                return(View("../Shared/Error", e));
            }
        }