public PartialViewResult RefreshParcels(
            OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
        {
            var viewModel = new ConfirmDialogFormViewModel(onlandVisualTrashAssessmentPrimaryKey.PrimaryKeyValue);

            return(ViewRefreshParcels(viewModel));
        }
        public ViewResult FinalizeOVTA(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;
            var viewModel = new FinalizeOVTAViewModel(onlandVisualTrashAssessment);

            return(ViewFinalizeOVTA(onlandVisualTrashAssessment, viewModel));
        }
        public ActionResult FinalizeOVTA(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey,
                                         FinalizeOVTAViewModel viewModel)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewFinalizeOVTA(onlandVisualTrashAssessment, viewModel));
            }

            HttpRequestStorage.DatabaseEntities.OnlandVisualTrashAssessmentPreliminarySourceIdentificationTypes.Load();
            viewModel.UpdateModel(onlandVisualTrashAssessment, HttpRequestStorage.DatabaseEntities.OnlandVisualTrashAssessmentPreliminarySourceIdentificationTypes.Local);

            SetMessageForDisplay("The OVTA was successfully finalized");


            if (viewModel.Finalize.GetValueOrDefault())
            {
                return(Redirect(
                           SitkaRoute <OnlandVisualTrashAssessmentController> .BuildUrlFromExpression(x => x.Detail(onlandVisualTrashAssessment))));
            }
            else
            {
                return(Redirect(
                           SitkaRoute <OnlandVisualTrashAssessmentController> .BuildUrlFromExpression(x =>
                                                                                                      x.FinalizeOVTA(onlandVisualTrashAssessment))));
            }
        }
        public ViewResult RefineAssessmentArea(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;
            var viewModel = new RefineAssessmentAreaViewModel();

            return(ViewRefineAssessmentArea(onlandVisualTrashAssessment, viewModel));
        }
        public ActionResult StageObservationPhoto(
            OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey,
            ObservationPhotoStagingSimple observationPhotoStagingSimple)
        {
            if (!ModelState.IsValid)
            {
                Response.StatusCode = (int)HttpStatusCode.BadRequest;

                // This endpoint can error out in a completely client-dependent way where the user's only recourse
                // is to try again until it works. We've never seen a server-side error from this endpoint that we
                // would be able to fix per-se, so just cancel the logging so we don't get bothered by it.
                SitkaGlobalBase.CancelErrorLoggingFromApplicationEnd();

                return(Json(new
                {
                    Error =
                        "There was an error uploading the image. Please try again."
                }));
            }

            var fileResource = FileResource.CreateNewFromHttpPostedFile(observationPhotoStagingSimple.Photo, CurrentPerson);

            var staging = new OnlandVisualTrashAssessmentObservationPhotoStaging(fileResource,
                                                                                 onlandVisualTrashAssessmentPrimaryKey.EntityObject);

            HttpRequestStorage.DatabaseEntities.SaveChanges();

            return(Json(new
            {
                PhotoStagingID = staging.OnlandVisualTrashAssessmentObservationPhotoStagingID,
                PhotoStagingUrl = staging.FileResource.GetFileResourceUrl()
            }));
        }
        public PartialViewResult Delete(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;
            var viewModel = new ConfirmDialogFormViewModel(onlandVisualTrashAssessment.OnlandVisualTrashAssessmentID);

            return(ViewDeleteOnlandVisualTrashAssessment(onlandVisualTrashAssessment, viewModel));
        }
        public ActionResult Delete(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey, ConfirmDialogFormViewModel viewModel)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewDeleteOnlandVisualTrashAssessment(onlandVisualTrashAssessment, viewModel));
            }

            var onlandVisualTrashAssessmentArea = onlandVisualTrashAssessment.OnlandVisualTrashAssessmentArea;

            var isProgressAssessment = onlandVisualTrashAssessment.IsProgressAssessment;

            onlandVisualTrashAssessment.DeleteFull(HttpRequestStorage.DatabaseEntities);
            HttpRequestStorage.DatabaseEntities.SaveChanges();
            if (onlandVisualTrashAssessmentArea != null)
            {
                onlandVisualTrashAssessmentArea.OnlandVisualTrashAssessmentBaselineScoreID = onlandVisualTrashAssessmentArea
                                                                                             .CalculateScoreFromBackingData(false)?.OnlandVisualTrashAssessmentScoreID;

                if (isProgressAssessment)
                {
                    onlandVisualTrashAssessmentArea.OnlandVisualTrashAssessmentProgressScoreID =
                        onlandVisualTrashAssessmentArea.CalculateProgressScore()
                        ?.OnlandVisualTrashAssessmentScoreID;
                }
            }

            SetMessageForDisplay("Successfully deleted the assessment.");
            return(new ModalDialogFormJsonResult(SitkaRoute <OnlandVisualTrashAssessmentController> .BuildUrlFromExpression(c => c.Index())));
        }
        public PartialViewResult EditStatusToAllowEdit(
            OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
        {
            var ovta      = onlandVisualTrashAssessmentPrimaryKey.EntityObject;
            var viewModel = new ConfirmDialogFormViewModel(onlandVisualTrashAssessmentPrimaryKey.PrimaryKeyValue);

            return(ViewEditStatusToAllowEdit(ovta, viewModel));
        }
        public ViewResult RecordObservations(
            OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;
            var viewModel = new RecordObservationsViewModel(onlandVisualTrashAssessment);

            return(ViewRecordObservations(onlandVisualTrashAssessment, viewModel));
        }
        public ViewResult AddOrRemoveParcels(
            OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            var parcelIDs = onlandVisualTrashAssessment.GetParcelIDsForAddOrRemoveParcels();

            var viewModel = new AddOrRemoveParcelsViewModel(parcelIDs);

            return(ViewAddOrRemoveParcels(onlandVisualTrashAssessment, viewModel));
        }
        public ActionResult RefreshParcels(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey,
                                           ConfirmDialogFormViewModel viewModel) //note that the viewModel is not actually used; we only need it to satisfy our opinionated routetablebuilder
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewRefreshParcels(viewModel));
            }

            onlandVisualTrashAssessment.IsDraftGeometryManuallyRefined = false;
            onlandVisualTrashAssessment.DraftGeometry = null;

            return(new ModalDialogFormJsonResult(
                       SitkaRoute <OnlandVisualTrashAssessmentController> .BuildUrlFromExpression(x =>
                                                                                                  x.AddOrRemoveParcels(onlandVisualTrashAssessment))));
        }
        public ActionResult EditStatusToAllowEdit(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey,
                                                  ConfirmDialogFormViewModel viewModel)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewEditStatusToAllowEdit(onlandVisualTrashAssessment, viewModel));
            }
            onlandVisualTrashAssessment.OnlandVisualTrashAssessmentStatusID = OnlandVisualTrashAssessmentStatus.InProgress.OnlandVisualTrashAssessmentStatusID;
            onlandVisualTrashAssessment.AssessingNewArea = false;



            // update the assessment area scores now that this assessment no longer contributes
            onlandVisualTrashAssessment.OnlandVisualTrashAssessmentArea.OnlandVisualTrashAssessmentBaselineScoreID =
                onlandVisualTrashAssessment.OnlandVisualTrashAssessmentArea.CalculateScoreFromBackingData(false)?
                .OnlandVisualTrashAssessmentScoreID;

            onlandVisualTrashAssessment.OnlandVisualTrashAssessmentArea.OnlandVisualTrashAssessmentProgressScoreID =
                onlandVisualTrashAssessment.OnlandVisualTrashAssessmentArea.CalculateProgressScore()?
                .OnlandVisualTrashAssessmentScoreID;

            if (onlandVisualTrashAssessment.IsTransectBackingAssessment)
            {
                onlandVisualTrashAssessment.IsTransectBackingAssessment = false;
                onlandVisualTrashAssessment.OnlandVisualTrashAssessmentArea.TransectLine = null;

                HttpRequestStorage.DatabaseEntities.SaveChanges();

                onlandVisualTrashAssessment.OnlandVisualTrashAssessmentArea.TransectLine = onlandVisualTrashAssessment
                                                                                           .OnlandVisualTrashAssessmentArea.RecomputeTransectLine(out var transectBackingAssessment);


                if (transectBackingAssessment != null)
                {
                    transectBackingAssessment.IsTransectBackingAssessment = true;
                }
            }

            SetMessageForDisplay("The OVTA was successfully returned to the \"In Progress\" status");


            return(new ModalDialogFormJsonResult(SitkaRoute <OnlandVisualTrashAssessmentController> .BuildUrlFromExpression(x =>
                                                                                                                            x.RecordObservations(onlandVisualTrashAssessment.OnlandVisualTrashAssessmentID))));
        }
        public ActionResult RecordObservations(
            OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey,
            RecordObservationsViewModel viewModel)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewRecordObservations(onlandVisualTrashAssessment, viewModel));
            }

            var allOnlandVisualTrashAssessmentObservations =
                HttpRequestStorage.DatabaseEntities.OnlandVisualTrashAssessmentObservations;

            viewModel.UpdateModel(onlandVisualTrashAssessment, allOnlandVisualTrashAssessmentObservations.Local);

            return(RedirectToAppropriateStep(viewModel, OVTASection.RecordObservations,
                                             onlandVisualTrashAssessmentPrimaryKey.EntityObject));
        }
        public ViewResult Detail(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            Check.Assert(onlandVisualTrashAssessment.OnlandVisualTrashAssessmentStatus == OnlandVisualTrashAssessmentStatus.Complete, "No details are available for this assessment because it has not been completed.");

            var observationsLayerGeoJson   = onlandVisualTrashAssessment.OnlandVisualTrashAssessmentObservations.MakeObservationsLayerGeoJson();
            var assessmentAreaLayerGeoJson = onlandVisualTrashAssessment.GetAssessmentAreaLayerGeoJson(false);

            var transsectLineLayerGeoJson = onlandVisualTrashAssessment.GetTransectLineLayerGeoJson();

            var ovtaSummaryMapInitJson = new OVTASummaryMapInitJson("summaryMap", observationsLayerGeoJson, assessmentAreaLayerGeoJson, transsectLineLayerGeoJson);
            var returnToEditUrl        =
                SitkaRoute <OnlandVisualTrashAssessmentController> .BuildUrlFromExpression(x =>
                                                                                           x.EditStatusToAllowEdit(onlandVisualTrashAssessment));

            var userHasPermissionToReturnToEdit = new OnlandVisualTrashAssessmentEditStatusFeature().HasPermission(CurrentPerson, onlandVisualTrashAssessment).HasPermission;

            return(RazorView <Detail, DetailViewData>(new DetailViewData(CurrentPerson, onlandVisualTrashAssessment, new TrashAssessmentSummaryMapViewData(ovtaSummaryMapInitJson, onlandVisualTrashAssessment.OnlandVisualTrashAssessmentObservations, NeptuneWebConfiguration.ParcelMapServiceUrl), returnToEditUrl, userHasPermissionToReturnToEdit)));
        }
        public ActionResult AddOrRemoveParcels(
            OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey,
            AddOrRemoveParcelsViewModel viewModel)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewAddOrRemoveParcels(onlandVisualTrashAssessment, viewModel));
            }

            var unionOfSelectedParcelGeometries = HttpRequestStorage.DatabaseEntities.Parcels
                                                  .Where(x => viewModel.ParcelIDs.Contains(x.ParcelID)).Select(x => x.ParcelGeometry).ToList()
                                                  .UnionListGeometries().FixSrid(CoordinateSystemHelper.NAD_83_HARN_CA_ZONE_VI_SRID);

            onlandVisualTrashAssessment.DraftGeometry = unionOfSelectedParcelGeometries;

            return(RedirectToAppropriateStep(viewModel, OVTASection.AddOrRemoveParcels,
                                             onlandVisualTrashAssessment));
        }
        public ActionResult RefineAssessmentArea(OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey, RefineAssessmentAreaViewModel viewModel)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewRefineAssessmentArea(onlandVisualTrashAssessment, viewModel));
            }

            // these come in in web mercator...
            var dbGeometrys         = viewModel.WktAndAnnotations.Select(x => DbGeometry.FromText(x.Wkt, CoordinateSystemHelper.WGS_1984_SRID).ToSqlGeometry().MakeValid().ToDbGeometry());
            var unionListGeometries = dbGeometrys.ToList().UnionListGeometries();

            // ...and then get fixed here
            onlandVisualTrashAssessment.DraftGeometry = CoordinateSystemHelper.ProjectWebMercatorToCaliforniaStatePlaneVI(unionListGeometries);
            onlandVisualTrashAssessment.IsDraftGeometryManuallyRefined = true;
            HttpRequestStorage.DatabaseEntities.SaveChanges();

            return(RedirectToAppropriateStep(viewModel, OVTASection.RefineAssessmentArea, onlandVisualTrashAssessment));
        }
 public ContentResult StageObservationPhoto(
     OnlandVisualTrashAssessmentPrimaryKey onlandVisualTrashAssessmentPrimaryKey)
 {
     return(Content(""));
 }