public IActionResult RemoveRestraintOrder(RestraintOrderViewModel model, FormSection section, int id)
        {
            LicenceApplicationPostDataHandler.Delete <RestraintOrder>(id);

            var lastLoaded = Session.GetLoadedPage();

            return(RedirectToAction(section, lastLoaded));
        }
        public IActionResult AddRestraintOrder(RestraintOrderViewModel model, FormSection section, int id)
        {
            if (!ModelState.IsValid)
            {
                return(RedirectToAction("AddRestraintOrder", new { section, id }));
            }

            switch (section)
            {
            case FormSection.PrincipalAuthority:
            {
                var answerId = LicenceApplicationPostDataHandler
                               .UpsertSecurityAnswerAndLinkToParent <RestraintOrderViewModel, RestraintOrder, PrincipalAuthority>(
                    Session.GetCurrentPaId(), id, model, pa => pa.RestraintOrders, ro => ro.PrincipalAuthority);

                if (Session.GetCurrentPaIsDirector())
                {
                    LicenceApplicationPostDataHandler
                    .UpsertSecurityAnswerAndLinkToParent <RestraintOrderViewModel, RestraintOrder, DirectorOrPartner>(
                        Session.GetCurrentDopId(), answerId, model, dop => dop.RestraintOrders,
                        ro => ro.DirectorOrPartner);
                }
                break;
            }

            case FormSection.AlternativeBusinessRepresentative:
                LicenceApplicationPostDataHandler
                .UpsertSecurityAnswerAndLinkToParent <RestraintOrderViewModel, RestraintOrder,
                                                      AlternativeBusinessRepresentative>(
                    Session.GetCurrentAbrId(), id, model, abr => abr.RestraintOrders,
                    ro => ro.AlternativeBusinessRepresentative);
                break;

            case FormSection.DirectorOrPartner:
            {
                var answerId = LicenceApplicationPostDataHandler
                               .UpsertSecurityAnswerAndLinkToParent <RestraintOrderViewModel, RestraintOrder, DirectorOrPartner>(
                    Session.GetCurrentDopId(), id, model, dop => dop.RestraintOrders, ro => ro.DirectorOrPartner);

                if (Session.GetCurrentDopIsPa())
                {
                    LicenceApplicationPostDataHandler
                    .UpsertSecurityAnswerAndLinkToParent <RestraintOrderViewModel, RestraintOrder, PrincipalAuthority>(
                        Session.GetCurrentPaId(), answerId, model, pa => pa.RestraintOrders, ro => ro.PrincipalAuthority);
                }
                break;
            }

            case FormSection.NamedIndividual:
                LicenceApplicationPostDataHandler
                .UpsertSecurityAnswerAndLinkToParent <RestraintOrderViewModel, RestraintOrder,
                                                      NamedIndividual>(
                    Session.GetCurrentNamedIndividualId(), id, model, ni => ni.RestraintOrders,
                    ro => ro.NamedIndividual);
                break;
            }

            var lastLoaded = Session.GetLoadedPage();

            return(RedirectToAction(section, lastLoaded));
        }