@model SetLogicViewModel @{ ViewData["Title"] = "Set Conditional Logic"; }

🔮 Conditional Logic Manager

Configure smart question routing for: @Model.QuestionnaireName

@Model.Questions.Count
Questions
@if (TempData["Success"] != null) {
@TempData["Success"]
} @if (TempData["Error"] != null) {
@TempData["Error"]
}

📋 Survey Structure Overview

@for (int i = 0; i < Model.Questions.Count; i++) { var hasConditions = Model.Questions[i].Answers.Any(a => a.ActionType != ConditionActionType.Continue);
@if (hasConditions) {
🔥 Logic
}
Q@(i + 1)
@(Model.Questions[i].QuestionText.Length > 60 ? Model.Questions[i].QuestionText.Substring(0, 60) + "..." : Model.Questions[i].QuestionText)
}
@Html.AntiForgeryToken()
@for (int questionIndex = 0; questionIndex < Model.Questions.Count; questionIndex++) { var question = Model.Questions[questionIndex]; var hasConditions = question.Answers.Any(a => a.ActionType != ConditionActionType.Continue);

Question @(questionIndex + 1): @question.QuestionText

@question.QuestionType • @question.Answers.Count answers @if (hasConditions) { Has Logic Rules }

@if (question.Answers.Any()) {
@for (int answerIndex = 0; answerIndex < question.Answers.Count; answerIndex++) { var answer = question.Answers[answerIndex]; var hasCondition = answer.ActionType != ConditionActionType.Continue;
Answer @(answerIndex + 1)

@answer.AnswerText

@if (hasCondition) { Active @GetConditionTypeBadge(answer.ActionType) }
@{ var skipToDisplay = answer.ActionType == ConditionActionType.SkipToQuestion ? "block" : "none"; }
@{ var skipCountDisplay = answer.ActionType == ConditionActionType.SkipCount ? "block" : "none"; var maxSkip = Math.Max(1, ViewBag.TotalQuestions - questionIndex - 1); var skipValue = answer.SkipCount ?? 1; }
@if (maxSkip > 0) {
Maximum: @maxSkip questions
} else {
No more questions to skip
}
@{ var endSurveyDisplay = answer.ActionType == ConditionActionType.EndSurvey ? "block" : "none"; }
Result: @GetConditionSummary(answer)
}
} else {
This question has no answers to configure conditions for.
}
}
Back to Questionnaires
@section Scripts { } @functions { string GetConditionSummary(AnswerConditionViewModel answer) { switch (answer.ActionType) { case ConditionActionType.Continue: return "Continue to the next question normally"; case ConditionActionType.SkipToQuestion: if (answer.TargetQuestionNumber.HasValue && answer.TargetQuestionNumber.Value <= Model.Questions.Count) { var targetQuestion = Model.Questions[answer.TargetQuestionNumber.Value - 1]; var questionPreview = targetQuestion.QuestionText.Length > 30 ? targetQuestion.QuestionText.Substring(0, 30) + "..." : targetQuestion.QuestionText; return $"Jump to Q{answer.TargetQuestionNumber}: {questionPreview}"; } return $"Jump to Question {answer.TargetQuestionNumber}"; case ConditionActionType.SkipCount: return $"Skip {answer.SkipCount} question(s)"; case ConditionActionType.EndSurvey: return "End the survey immediately"; default: return "No condition set"; } } string GetConditionTypeBadge(ConditionActionType actionType) { switch (actionType) { case ConditionActionType.SkipToQuestion: return "Skip To"; case ConditionActionType.SkipCount: return "Skip Count"; case ConditionActionType.EndSurvey: return "End Survey"; default: return ""; } } }