public async Task <IActionResult> EditProposalExample(string scenarioId, string proposalId)
        {
            var scenario = await ScenarioModel.GetAsync(AppSettings.DefaultRepo, scenarioId);

            if (scenario == null)
            {
                return(NotFound());
            }

            var proposalExample = scenario.Proposals?.FirstOrDefault(i => i.ProposalId == proposalId);

            if (proposalExample == null)
            {
                return(NotFound());
            }

            await scenario.GetContentsAsync();

            await proposalExample.GetContentsAsync();

            var model = new AddProposalExampleModel();

            model.Scenario   = scenario;
            model.ProposalId = proposalId;
            model.Contents   = proposalExample.Contents;

            this.ViewBag.FormAction = "EditProposalExample";

            return(View("EditProposalExample", model));
        }
        public async Task <IActionResult> AddProposalExample(string scenarioId, AddProposalExampleModel model)
        {
            if (string.IsNullOrWhiteSpace(model.ProposalId))
            {
                throw new Exception("You must pick a proposal");
            }

            var map = await MapModel.GetAsync(AppSettings.DefaultRepo);

            var parent = map.FindScenario(scenarioId);

            if (parent != null)
            {
                if (parent.ProposalExamples == null)
                {
                    parent.ProposalExamples = new List <MapProposalExampleModel>();
                }

                var newProposal = new MapProposalExampleModel()
                {
                    ProposalId = model.ProposalId
                };

                parent.ProposalExamples.Add(newProposal);

                using (await LockingService.LockAsync())
                {
                    await map.SaveAsync();

                    await BaseContentsModel.SaveContentsAsync(parent.Id + "-" + model.ProposalId, AppSettings.DefaultRepo, model.Contents);

                    await ChangesService.Get(AppSettings.DefaultRepo).PushChangesAsync();
                }
            }

            dynamic parameters = new ExpandoObject();

            parameters.scenarioId = scenarioId;
            parameters.proposalId = model.ProposalId;
            return(RedirectToAction(actionName: nameof(ViewProposalExample), routeValues: parameters));
        }
        public async Task <IActionResult> AddProposalExample(string scenarioId)
        {
            var map = await MapModel.GetAsync(AppSettings.DefaultRepo);

            var model = new AddProposalExampleModel();

            model.Scenario = await ScenarioModel.GetAsync(AppSettings.DefaultRepo, scenarioId);

            if (model.Scenario == null)
            {
                return(RedirectToAction(controllerName: nameof(ScenariosController), actionName: nameof(ScenariosController.Index)));
            }
            await model.Scenario.GetContentsAsync();

            model.AvailableProposals = (map.Proposals ?? new List <MapProposalModel>()).Where(i => !model.Scenario.Proposals.Exists(x => x.ProposalId == i.Id)).ToList();

            this.ViewBag.Adding     = true;
            this.ViewBag.FormAction = "AddProposalExample";

            return(View("EditProposalExample", model));
        }
        public async Task <IActionResult> EditProposalExample(string scenarioId, string proposalId, AddProposalExampleModel model)
        {
            var scenario = await ScenarioModel.GetAsync(AppSettings.DefaultRepo, scenarioId);

            if (scenario == null)
            {
                return(NotFound());
            }

            var proposalExample = scenario.Proposals?.FirstOrDefault(i => i.ProposalId == proposalId);

            if (proposalExample == null)
            {
                return(NotFound());
            }

            using (await LockingService.LockAsync())
            {
                await BaseContentsModel.SaveContentsAsync(proposalExample.Id, AppSettings.DefaultRepo, model.Contents);

                await ChangesService.Get(AppSettings.DefaultRepo).PushChangesAsync();
            }

            dynamic parameters = new ExpandoObject();

            parameters.scenarioId = scenarioId;
            parameters.proposalId = proposalId;
            return(RedirectToAction(actionName: nameof(ViewProposalExample), routeValues: parameters));
        }