// helpers

        // assumes that we are not looking for the parcels-via-transect area

        private ActionResult RedirectToAppropriateStep(OnlandVisualTrashAssessmentViewModel viewModel,
                                                       OVTASection ovtaSection, OnlandVisualTrashAssessment ovta)
        {
            return(Redirect(viewModel.AutoAdvance
                ? ovtaSection.GetNextSectionUrl(ovta)
                : ovtaSection.GetSectionUrl(ovta)));
        }
        private ViewResult ViewInstructions(InstructionsViewModel viewModel, OnlandVisualTrashAssessment ovta)
        {
            var viewData = new InstructionsViewData(CurrentPerson,
                                                    NeptunePage.GetNeptunePageByPageType(NeptunePageType.OVTAInstructions), ovta);

            return(RazorView <Instructions, InstructionsViewData, InstructionsViewModel>(viewData, viewModel));
        }
        private PartialViewResult ViewDeleteOnlandVisualTrashAssessment(OnlandVisualTrashAssessment onlandVisualTrashAssessment, ConfirmDialogFormViewModel viewModel)
        {
            var confirmMessage = $"Are you sure you want to delete the assessment from {onlandVisualTrashAssessment.CreatedDate.ToShortDateString()}?";

            var viewData = new ConfirmDialogFormViewData(confirmMessage, true);

            return(RazorPartialView <ConfirmDialogForm, ConfirmDialogFormViewData, ConfirmDialogFormViewModel>(viewData, viewModel));
        }
        private PartialViewResult ViewEditStatusToAllowEdit(OnlandVisualTrashAssessment ovta, ConfirmDialogFormViewModel viewModel)
        {
            var confirmMessage =
                $"This OVTA was finalized on {ovta.CompletedDate}. Are you sure you want to revert this OVTA to the \"In Progress\" status?";

            var viewData = new ConfirmDialogFormViewData(confirmMessage, true);

            return(RazorPartialView <ConfirmDialogForm, ConfirmDialogFormViewData, ConfirmDialogFormViewModel>(viewData,
                                                                                                               viewModel));
        }
        private ViewResult ViewRefineAssessmentArea(OnlandVisualTrashAssessment onlandVisualTrashAssessment, RefineAssessmentAreaViewModel viewModel)
        {
            var observationsLayerGeoJson        = onlandVisualTrashAssessment.OnlandVisualTrashAssessmentObservations.MakeObservationsLayerGeoJson();
            var assessmentAreaLayerGeoJson      = onlandVisualTrashAssessment.GetAssessmentAreaLayerGeoJson(true);
            var transectLineLayerGeoJson        = onlandVisualTrashAssessment.GetTransectLineLayerGeoJson();
            var refineAssessmentAreaMapInitJson = new RefineAssessmentAreaMapInitJson("refineAssessmentAreaMap", observationsLayerGeoJson, assessmentAreaLayerGeoJson, transectLineLayerGeoJson);

            var viewData = new RefineAssessmentAreaViewData(CurrentPerson, OVTASection.RefineAssessmentArea, onlandVisualTrashAssessment, refineAssessmentAreaMapInitJson, NeptuneWebConfiguration.ParcelMapServiceUrl);

            return(RazorView <RefineAssessmentArea, RefineAssessmentAreaViewData, RefineAssessmentAreaViewModel>(
                       viewData, viewModel));
        }
        private ViewResult ViewAddOrRemoveParcels(OnlandVisualTrashAssessment onlandVisualTrashAssessment,
                                                  AddOrRemoveParcelsViewModel viewModel)
        {
            var addOrRemoveParcelsMapIntJson = new AddOrRemoveParcelsMapIntJson("addOrRemoveParcelsMap",
                                                                                onlandVisualTrashAssessment.OnlandVisualTrashAssessmentObservations.MakeObservationsLayerGeoJson(), onlandVisualTrashAssessment.GetTransectLineLayerGeoJson());

            var viewData = new AddOrRemoveParcelsViewData(CurrentPerson, OVTASection.AddOrRemoveParcels,
                                                          onlandVisualTrashAssessment, addOrRemoveParcelsMapIntJson);

            return(RazorView <AddOrRemoveParcels, AddOrRemoveParcelsViewData, AddOrRemoveParcelsViewModel>(viewData,
                                                                                                           viewModel));
        }
        private ViewResult ViewFinalizeOVTA(OnlandVisualTrashAssessment onlandVisualTrashAssessment,
                                            FinalizeOVTAViewModel viewModel)
        {
            var observationsLayerGeoJson   = onlandVisualTrashAssessment.OnlandVisualTrashAssessmentObservations.MakeObservationsLayerGeoJson();
            var assessmentAreaLayerGeoJson = onlandVisualTrashAssessment.GetAssessmentAreaLayerGeoJson(false);

            var transsectLineLayerGeoJson = onlandVisualTrashAssessment.GetTransectLineLayerGeoJson();

            var ovtaSummaryMapInitJson = new OVTASummaryMapInitJson("summaryMap", observationsLayerGeoJson, assessmentAreaLayerGeoJson, transsectLineLayerGeoJson);

            var scoresSelectList = OnlandVisualTrashAssessmentScore.All.ToSelectListWithDisabledEmptyFirstRow(x => x.OnlandVisualTrashAssessmentScoreID.ToString(CultureInfo.InvariantCulture), x => x.OnlandVisualTrashAssessmentScoreDisplayName.ToString(CultureInfo.InvariantCulture),
                                                                                                              "Choose a score");
            var viewData = new FinalizeOVTAViewData(CurrentPerson,
                                                    onlandVisualTrashAssessment, ovtaSummaryMapInitJson, scoresSelectList, NeptuneWebConfiguration.ParcelMapServiceUrl);

            return(RazorView <FinalizeOVTA, FinalizeOVTAViewData, FinalizeOVTAViewModel>(viewData, viewModel));
        }
        private ViewResult ViewRecordObservations(OnlandVisualTrashAssessment onlandVisualTrashAssessment,
                                                  RecordObservationsViewModel viewModel)
        {
            var observationsLayerGeoJson =
                onlandVisualTrashAssessment
                .OnlandVisualTrashAssessmentObservations.MakeObservationsLayerGeoJson();

            var assessmentAreaLayerGeoJson = onlandVisualTrashAssessment.GetAssessmentAreaLayerGeoJson(false);

            var transectLineLayerGeoJson = onlandVisualTrashAssessment.GetTransectLineLayerGeoJson();

            var ovtaObservationsMapInitJson = new OVTAObservationsMapInitJson("observationsMap",
                                                                              observationsLayerGeoJson, assessmentAreaLayerGeoJson, transectLineLayerGeoJson);

            var viewData = new RecordObservationsViewData(CurrentPerson,
                                                          onlandVisualTrashAssessment, ovtaObservationsMapInitJson, NeptuneWebConfiguration.ParcelMapServiceUrl);

            return(RazorView <RecordObservations, RecordObservationsViewData, RecordObservationsViewModel>(viewData,
                                                                                                           viewModel));
        }
        private ViewResult ViewInitiateOVTA(OnlandVisualTrashAssessment onlandVisualTrashAssessment,
                                            InitiateOVTAViewModel viewModel)
        {
            var stormwaterJurisdictionsPersonCanEdit = CurrentPerson.GetStormwaterJurisdictionsPersonCanView().ToList();

            // do not offer a drop-down menu if the user can only edit one jurisdiction
            var defaultJurisdiction = stormwaterJurisdictionsPersonCanEdit.Count == 1
                ? stormwaterJurisdictionsPersonCanEdit.Single()
                : null;

            var onlandVisualTrashAssessmentAreas = stormwaterJurisdictionsPersonCanEdit.SelectMany(x => x.OnlandVisualTrashAssessmentAreas).ToList();

            var mapInitJson = new SelectOVTAAreaMapInitJson("selectOVTAAreaMap",
                                                            onlandVisualTrashAssessmentAreas.MakeAssessmentAreasLayerGeoJson());

            var viewData = new InitiateOVTAViewData(CurrentPerson,
                                                    onlandVisualTrashAssessment, stormwaterJurisdictionsPersonCanEdit, mapInitJson, onlandVisualTrashAssessmentAreas,
                                                    defaultJurisdiction, NeptuneWebConfiguration.ParcelMapServiceUrl);

            return(RazorView <InitiateOVTA, InitiateOVTAViewData, InitiateOVTAViewModel>(viewData, viewModel));
        }
        public ActionResult NewAssessment(
            OnlandVisualTrashAssessmentAreaPrimaryKey onlandVisualTrashAssessmentAreaPrimaryKey, ConfirmDialogFormViewModel viewModel)
        {
            var onlandVisualTrashAssessmentArea = onlandVisualTrashAssessmentAreaPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewNewAssessment(onlandVisualTrashAssessmentArea, viewModel));
            }

            var onlandVisualTrashAssessment = new OnlandVisualTrashAssessment(CurrentPerson, DateTime.Now, onlandVisualTrashAssessmentArea.StormwaterJurisdiction,
                                                                              OnlandVisualTrashAssessmentStatus.InProgress, false, false)
            {
                OnlandVisualTrashAssessmentAreaID = onlandVisualTrashAssessmentArea.OnlandVisualTrashAssessmentAreaID,
                AssessingNewArea = false
            };

            HttpRequestStorage.DatabaseEntities.OnlandVisualTrashAssessments.Add(onlandVisualTrashAssessment);
            HttpRequestStorage.DatabaseEntities.SaveChanges();

            return(new ModalDialogFormJsonResult(
                       SitkaRoute <OnlandVisualTrashAssessmentController> .BuildUrlFromExpression(x => x.RecordObservations(onlandVisualTrashAssessment))));
        }
        public ActionResult InitiateOVTA(int?onlandVisualTrashAssessmentPrimaryKey, InitiateOVTAViewModel viewModel)
        {
            var onlandVisualTrashAssessment = onlandVisualTrashAssessmentPrimaryKey.HasValue
                ? HttpRequestStorage.DatabaseEntities.OnlandVisualTrashAssessments.GetOnlandVisualTrashAssessment(
                onlandVisualTrashAssessmentPrimaryKey.Value)
                : null;

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

            if (onlandVisualTrashAssessment == null)
            {
                onlandVisualTrashAssessment = new OnlandVisualTrashAssessment(CurrentPerson.PersonID, DateTime.Now, viewModel.StormwaterJurisdiction.StormwaterJurisdictionID, OnlandVisualTrashAssessmentStatus.InProgress.OnlandVisualTrashAssessmentStatusID, false, false);
                HttpRequestStorage.DatabaseEntities.OnlandVisualTrashAssessments.Add(onlandVisualTrashAssessment);
                HttpRequestStorage.DatabaseEntities.SaveChanges();
            }

            viewModel.UpdateModel(onlandVisualTrashAssessment);

            return(RedirectToAppropriateStep(viewModel, OVTASection.InitiateOVTA, onlandVisualTrashAssessment));
        }