public FormConfiguration()
        {
            ShowActionButtonContainer = JsonConfiguration.ShowActionButtonContainer.No;

            IntializeSpecialActionLinks();

            SubmitActionLink              = new SubmitActionLink();
            PreviousActionLink            = new PreviousActionLink();
            NextActionLink                = new NextActionLink();
            CreateRelatedRecordActionLink = new CreateRelatedRecordActionLink();
        }
        /// <summary>
        /// Class constructor used by the EntityForm Control
        /// </summary>
        public FormConfiguration(IPortalContext portalContext, string entityName, FormActionMetadata formActionMetadata,
                                 string portalName, int languageCode, bool enableEntityPermissions, bool autoGenerateStepsFromTabs, bool addSubmitButton = false, bool addNextPrevious = false)
        {
            ShowActionButtonContainer = JsonConfiguration.ShowActionButtonContainer.No;

            EntityName = entityName;
            IntializeSpecialActionLinks();

            SubmitActionLink              = new SubmitActionLink();
            PreviousActionLink            = new PreviousActionLink();
            NextActionLink                = new NextActionLink();
            CreateRelatedRecordActionLink = new CreateRelatedRecordActionLink();

            if (formActionMetadata == null)
            {
                return;
            }

            ActionButtonDropDownLabel = formActionMetadata.ActionButtonDropDownLabel.GetLocalizedString(languageCode);
            ActionNavbarCssClass      = formActionMetadata.ActionNavbarCssClass;
            TopContainerCssClass      = formActionMetadata.TopContainerCssClass;
            BottomContainerCssClass   = formActionMetadata.BottomContainerCssClass;

            ActionButtonStyle     = formActionMetadata.ActionButtonStyle;
            ActionButtonPlacement = formActionMetadata.ActionButtonPlacement;
            ActionButtonAlignment = formActionMetadata.ActionButtonAlignment;

            EnableEntityPermissions = enableEntityPermissions;
            PortalName   = portalName;
            LanguageCode = languageCode;

            AutoGenerateSteps = autoGenerateStepsFromTabs;

            if (formActionMetadata.Actions != null)
            {
                SetFormActions(portalContext, formActionMetadata, languageCode, portalName, addSubmitButton, addNextPrevious);
            }
        }
        private void SetFormActions(IPortalContext portalContext, FormActionMetadata formActionMetadata, int languageCode, string portalName = null,
                                    bool addSubmitButton = false, bool addNextPrevious = false)
        {
            var actions = formActionMetadata.Actions.OrderBy(a => a.ActionIndex).ToList();

            if (addSubmitButton)
            {
                var submitActions = actions.Where(a => a is SubmitAction);

                if (!(submitActions.Any()))
                {
                    var newSubmitAction = new SubmitAction()
                    {
                        ActionButtonAlignment = JsonConfiguration.ActionButtonAlignment.Left,
                        ActionButtonPlacement = JsonConfiguration.ActionButtonPlacement.BelowForm,
                        ActionButtonStyle     = JsonConfiguration.ActionButtonStyle.ButtonGroup,
                        ActionIndex           = -1,
                        ButtonCssClass        = "btn-primary"
                    };

                    actions.Insert(0, newSubmitAction);
                }
            }

            if (addNextPrevious && AutoGenerateSteps)
            {
                var nextActions = actions.Where(a => a is NextAction);

                if (!(nextActions.Any()))
                {
                    var newNextAction = new NextAction()
                    {
                        ActionButtonAlignment = JsonConfiguration.ActionButtonAlignment.Left,
                        ActionButtonPlacement = JsonConfiguration.ActionButtonPlacement.BelowForm,
                        ActionButtonStyle     = JsonConfiguration.ActionButtonStyle.ButtonGroup,
                        ActionIndex           = -1,
                        ButtonCssClass        = "btn btn-primary navbar-btn button next next-btn"
                    };

                    actions.Insert(0, newNextAction);
                }

                var previousActions = actions.Where(a => a is PreviousAction);

                if (!(previousActions.Any()))
                {
                    var newPreviousAction = new PreviousAction()
                    {
                        ActionButtonAlignment = JsonConfiguration.ActionButtonAlignment.Left,
                        ActionButtonPlacement = JsonConfiguration.ActionButtonPlacement.BelowForm,
                        ActionButtonStyle     = JsonConfiguration.ActionButtonStyle.ButtonGroup,
                        ActionIndex           = -2,
                        ButtonCssClass        = "btn btn-default navbar-btn button previous previous-btn"
                    };

                    actions.Insert(0, newPreviousAction);
                }
            }

            var topItemActionLinks    = new List <ViewActionLink>();
            var bottomItemActionLinks = new List <ViewActionLink>();

            foreach (var action in actions)
            {
                if (action is WorkflowAction)
                {
                    var workflowAction = (WorkflowAction)action;

                    if (!workflowAction.IsConfigurationValid())
                    {
                        continue;
                    }

                    var workflowActionLink = new WorkflowActionLink(portalContext, new EntityReference("workflow", workflowAction.WorkflowId), formActionMetadata, languageCode, workflowAction, true, null, portalName);

                    AddActionLinkToSet(topItemActionLinks, bottomItemActionLinks, workflowActionLink);
                }

                if (action is DeleteAction)
                {
                    var deleteAction = (DeleteAction)action;

                    if (!deleteAction.IsConfigurationValid())
                    {
                        continue;
                    }

                    var deleteActionLink = new DeleteActionLink(portalContext, formActionMetadata, languageCode, deleteAction, true, null, portalName);

                    DeleteActionLink = deleteActionLink;

                    AddActionLinkToSet(topItemActionLinks, bottomItemActionLinks, deleteActionLink);
                }

                if (action is SubmitAction)
                {
                    var submitAction = (SubmitAction)action;

                    if (!submitAction.IsConfigurationValid())
                    {
                        continue;
                    }

                    var submitActionLink = new SubmitActionLink(portalContext, languageCode, submitAction, true, null, portalName);

                    SubmitActionLink = submitActionLink;

                    AddActionLinkToSet(topItemActionLinks, bottomItemActionLinks, submitActionLink);
                }

                if (action is PreviousAction)
                {
                    var previousAction = (PreviousAction)action;

                    if (!previousAction.IsConfigurationValid())
                    {
                        continue;
                    }

                    var previousActionLink = new PreviousActionLink(portalContext, languageCode, previousAction, true, null, portalName);

                    PreviousActionLink = previousActionLink;

                    AddActionLinkToSet(topItemActionLinks, bottomItemActionLinks, previousActionLink);
                }

                if (action is NextAction)
                {
                    var nextAction = (NextAction)action;

                    if (!nextAction.IsConfigurationValid())
                    {
                        continue;
                    }

                    var nextActionLink = new NextActionLink(portalContext, languageCode, nextAction, true, null, portalName);

                    NextActionLink = nextActionLink;

                    AddActionLinkToSet(topItemActionLinks, bottomItemActionLinks, nextActionLink);
                }

                if (action is CreateRelatedRecordAction)
                {
                    var createRelatedRecordAction = (CreateRelatedRecordAction)action;

                    if (!createRelatedRecordAction.IsConfigurationValid())
                    {
                        continue;
                    }

                    var createRelatedRecordActionLink = new CreateRelatedRecordActionLink(portalContext, formActionMetadata, languageCode, createRelatedRecordAction, true, portalName);

                    CreateRelatedRecordActionLink = createRelatedRecordActionLink;

                    AddActionLinkToSet(topItemActionLinks, bottomItemActionLinks, createRelatedRecordActionLink);
                }

                SetSpecialMessageActions(portalContext, formActionMetadata, languageCode, action, topItemActionLinks, bottomItemActionLinks, portalName);
            }

            TopFormActionLinks    = topItemActionLinks;
            BottomFormActionLinks = bottomItemActionLinks;
        }