def add_logic(request, qset_id, question_id): question = Question.get(id=question_id) batch = QuestionSet.get(id=qset_id) QuestionForm = get_question_form(batch.question_model()) response = None cancel_url = '../' logic_form = LogicForm(question) question_rules_for_batch = {} # question_rules_for_batch[question] = question.rules_for_batch(batch) if request.method == "POST": logic_form = LogicForm(question, data=request.POST) if logic_form.is_valid(): logic_form.save() messages.success(request, 'Logic successfully added.') response = HttpResponseRedirect( reverse('qset_questions_page', args=(batch.pk, ))) breadcrumbs = Question.edit_breadcrumbs(qset=batch) if breadcrumbs: request.breadcrumbs(breadcrumbs) cancel_url = breadcrumbs[-1][1] context = { 'logic_form': logic_form, 'button_label': 'Save', 'question': question, 'USSD_MAX_CHARS': settings.USSD_MAX_CHARS, 'rules_for_batch': question_rules_for_batch, 'questionform': QuestionForm(batch, parent_question=question), 'modal_action': reverse('add_qset_subquestion_page', args=(batch.pk, )), 'class': 'question-form', 'batch_id': qset_id, 'batch': batch, 'cancel_url': cancel_url } return response or render(request, "set_questions/logic.html", context)
def manage_loop(request, question_id): question = Question.get(id=question_id) batch = QuestionSet.get(pk=question.qset.pk) cancel_url = '../' existing_loop = getattr(question, 'loop_started', None) looping_form = LoopingForm(question, instance=existing_loop) if request.method == "POST": looping_form = LoopingForm(question, instance=existing_loop, data=request.POST) if looping_form.is_valid(): looping_form.save() messages.success(request, 'Loop Logic successfully added.') return HttpResponseRedirect( reverse('qset_questions_page', args=(batch.pk, ))) breadcrumbs = Question.edit_breadcrumbs(qset=batch) if breadcrumbs: request.breadcrumbs(breadcrumbs) cancel_url = breadcrumbs[-1][1] context = { 'loop_form': looping_form, 'button_label': 'Save', 'question': question, 'cancel_url': cancel_url } return render(request, "set_questions/loop.html", context)
def manage_loop(request, question_id): question = Question.get(id=question_id) batch = QuestionSet.get(pk=question.qset.pk) cancel_url = '../' existing_loop = getattr(question, 'loop_started', None) looping_form = LoopingForm(question, instance=existing_loop) if request.method == "POST": looping_form = LoopingForm( question, instance=existing_loop, data=request.POST) if looping_form.is_valid(): looping_form.save() messages.success(request, 'Loop Logic successfully added.') return HttpResponseRedirect( reverse( 'qset_questions_page', args=( batch.pk, ))) breadcrumbs = Question.edit_breadcrumbs(qset=batch) if breadcrumbs: request.breadcrumbs(breadcrumbs) cancel_url = breadcrumbs[-1][1] context = { 'loop_form': looping_form, 'button_label': 'Save', 'question': question, 'cancel_url': cancel_url} return render(request, "set_questions/loop.html", context)
def _render_question_view(request, batch, instance=None, prev_question=None): if instance is None and prev_question is None: prev_question = batch.last_question_inline() elif prev_question is None: try: prev_inlines = instance.previous_inlines() if prev_inlines: prev_question = prev_inlines[-1] except ValidationError: pass button_label = 'Create' options = None response = None QuestionForm = get_question_form(batch.question_model()) if instance: button_label = 'Save' options = instance.options.all().order_by('order') # options = [option.text.strip()\ #for option in options] if options else None if request.method == 'POST': question_form = QuestionForm(batch, data=request.POST, instance=instance, prev_question=prev_question) response, question_form = _process_question_form( request, batch, response, question_form) else: question_form = QuestionForm(batch, instance=instance, prev_question=prev_question) context = { 'button_label': button_label, 'id': 'add-question-form', 'instance': instance, 'request': request, 'class': 'question-form', 'USSD_MAX_CHARS': settings.USSD_MAX_CHARS, 'batch': batch, 'prev_question': prev_question, # 'prev_question': prev_question, 'cancel_url': reverse('qset_questions_page', args=(batch.pk, )), 'questionform': question_form, 'response_validation_form': ResponseValidationForm(), 'model_name': batch.__class__.__name__ } if options: #options = filter(lambda text: text.strip(), #list(OrderedDict.fromkeys(options))) # options = map(lambda option: re.sub("[%s]" % \ #settings.USSD_IGNORED_CHARACTERS, '', option), options) # map(lambda option: re.sub(" ", ' ', option), options) context['options'] = options breadcrumbs = Question.edit_breadcrumbs(qset=batch) if breadcrumbs: request.breadcrumbs(breadcrumbs) return response, context
def _save_subquestion(request, batch_id, instance=None): # possible subquestions are questions not bound to any interviewer yet batch = QuestionSet.get(pk=batch_id) QuestionForm = get_question_form(batch.question_model()) questionform = QuestionForm(batch, instance=instance) if request.method == 'POST': questionform = QuestionForm( batch, data=request.POST, instance=instance) if questionform.is_valid(): if instance: zombify = False else: zombify = True question = questionform.save(zombie=zombify) if request.is_ajax(): return HttpResponse( json.dumps( { 'id': question.pk, 'text': question.text, 'identifier': question.identifier}), content_type='application/json') messages.info(request, 'Sub Question saved') if instance: heading = 'Edit Subquestion' else: heading = 'New Subquestion' context = { 'questionform': questionform, 'button_label': 'Create', 'id': 'add-sub_question-form', 'USSD_MAX_CHARS': settings.USSD_MAX_CHARS, 'save_url': reverse( '%s_home' % batch.resolve_tag()), 'cancel_url': reverse( 'qset_questions_page', args=( batch.pk, )), 'class': 'question-form', 'heading': heading} breadcrumbs = Question.edit_breadcrumbs(qset=batch) if breadcrumbs: request.breadcrumbs(breadcrumbs) template_name = 'set_questions/new.html' if request.is_ajax(): template_name = 'set_questions/_add_question.html' return render(request, template_name, context) else: return HttpResponseRedirect( reverse( 'qset_questions_page', args=( batch.pk, )))
def _render_question_view(request, batch, instance=None, prev_question=None): if instance is None and prev_question is None: prev_question = batch.last_question_inline() elif prev_question is None: try: prev_inlines = instance.previous_inlines() if prev_inlines: prev_question = prev_inlines[-1] except ValidationError: pass button_label = 'Create' options = None response = None QuestionForm = get_question_form(batch.question_model()) if instance: button_label = 'Save' options = instance.options.all().order_by('order') # options = [option.text.strip()\ #for option in options] if options else None if request.method == 'POST': question_form = QuestionForm( batch, data=request.POST, instance=instance, prev_question=prev_question) response, question_form = _process_question_form(request, batch, response, question_form) else: question_form = QuestionForm( batch, instance=instance, prev_question=prev_question) context = {'button_label': button_label, 'id': 'add-question-form', 'instance':instance, 'request': request, 'class': 'question-form', 'USSD_MAX_CHARS': settings.USSD_MAX_CHARS, 'batch': batch, 'prev_question': prev_question, # 'prev_question': prev_question, 'cancel_url': reverse('qset_questions_page', args=(batch.pk, )), 'questionform': question_form, 'response_validation_form': ResponseValidationForm(), 'model_name' : batch.__class__.__name__ } if options: #options = filter(lambda text: text.strip(), #list(OrderedDict.fromkeys(options))) # options = map(lambda option: re.sub("[%s]" % \ #settings.USSD_IGNORED_CHARACTERS, '', option), options) # map(lambda option: re.sub(" ", ' ', option), options) context['options'] = options breadcrumbs = Question.edit_breadcrumbs(qset=batch) if breadcrumbs: request.breadcrumbs(breadcrumbs) return response, context
def _save_subquestion(request, batch_id, instance=None): # possible subquestions are questions not bound to any interviewer yet batch = QuestionSet.get(pk=batch_id) QuestionForm = get_question_form(batch.question_model()) questionform = QuestionForm(batch, instance=instance) if request.method == 'POST': questionform = QuestionForm(batch, data=request.POST, instance=instance) if questionform.is_valid(): if instance: zombify = False else: zombify = True question = questionform.save(zombie=zombify) if request.is_ajax(): return HttpResponse(json.dumps({ 'id': question.pk, 'text': question.text, 'identifier': question.identifier }), content_type='application/json') messages.info(request, 'Sub Question saved') if instance: heading = 'Edit Subquestion' else: heading = 'New Subquestion' context = { 'questionform': questionform, 'button_label': 'Create', 'id': 'add-sub_question-form', 'USSD_MAX_CHARS': settings.USSD_MAX_CHARS, 'save_url': reverse('%s_home' % batch.resolve_tag()), 'cancel_url': reverse('qset_questions_page', args=(batch.pk, )), 'class': 'question-form', 'heading': heading } breadcrumbs = Question.edit_breadcrumbs(qset=batch) if breadcrumbs: request.breadcrumbs(breadcrumbs) template_name = 'set_questions/new.html' if request.is_ajax(): template_name = 'set_questions/_add_question.html' return render(request, template_name, context) else: return HttpResponseRedirect( reverse('qset_questions_page', args=(batch.pk, )))
def add_logic(request, qset_id, question_id): question = Question.get(id=question_id) batch = QuestionSet.get(id=qset_id) QuestionForm = get_question_form(batch.question_model()) response = None cancel_url = '../' logic_form = LogicForm(question) question_rules_for_batch = {} # question_rules_for_batch[question] = question.rules_for_batch(batch) if request.method == "POST": logic_form = LogicForm(question, data=request.POST) if logic_form.is_valid(): logic_form.save() messages.success(request, 'Logic successfully added.') response = HttpResponseRedirect( reverse('qset_questions_page', args=(batch.pk, ))) breadcrumbs = Question.edit_breadcrumbs(qset=batch) if breadcrumbs: request.breadcrumbs(breadcrumbs) cancel_url = breadcrumbs[-1][1] context = { 'logic_form': logic_form, 'button_label': 'Save', 'question': question, 'USSD_MAX_CHARS': settings.USSD_MAX_CHARS, 'rules_for_batch': question_rules_for_batch, 'questionform': QuestionForm( batch, parent_question=question), 'modal_action': reverse( 'add_qset_subquestion_page', args=( batch.pk, )), 'class': 'question-form', 'batch_id': qset_id, 'batch': batch, 'cancel_url': cancel_url} return response or render(request, "set_questions/logic.html", context)
def assign(request, qset_id): batch = QuestionSet.get(id=qset_id) if batch.interviews.count(): error_message = "Questions cannot be assigned \ interviews has already been conducted: %s." % \ batch.name.capitalize() messages.error(request, error_message) return HttpResponseRedirect( reverse('qset_questions_page', args=(batch.pk, ))) if request.method == 'POST': data = dict(request.POST) last_question = batch.last_question_inline() lib_questions = QuestionTemplate.objects.filter( identifier__in=data.get('identifier', '')) if lib_questions: for lib_question in lib_questions: question = Question.objects.create( identifier=lib_question.identifier, text=lib_question.text, answer_type=lib_question.answer_type, qset=batch, ) # assign the options for option in lib_question.options.all(): QuestionOption.objects.create(question=question, text=option.text, order=option.order) if last_question: QuestionFlow.objects.create(question=last_question, next_question=question) else: batch.start_question = question batch.save() last_question = question #batch_questions_form = BatchQuestionsForm(batch=batch,\ #\data=request.POST, instance=batch) success_message = "Questions successfully assigned to %s: %s." % ( batch.verbose_name(), batch.name.capitalize()) messages.success(request, success_message) return HttpResponseRedirect( reverse('qset_questions_page', args=(batch.pk, ))) used_identifiers = [ question.identifier for question in batch.questions.all() ] library_questions = QuestionTemplate.objects.exclude( identifier__in=used_identifiers).order_by('identifier') question_filter_form = QuestionFilterForm() # library_questions = question_filter_form.filter(library_questions) breadcrumbs = Question.edit_breadcrumbs(qset=batch) page_name = '' if breadcrumbs: if breadcrumbs[0][0] == 'Listing Form': page_name = 'Listing' else: page_name = 'Batch' request.breadcrumbs(breadcrumbs) context = { 'batch_questions_form': unicode(BatchQuestionsForm()), 'batch': batch, 'button_label': 'Save', 'id': 'assign-question-to-batch-form', 'library_questions': library_questions, 'question_filter_form': question_filter_form, 'page_name': page_name, 'redirect_url': '/qsets/%s/questions/' % qset_id } return render(request, 'set_questions/assign.html', context)
def assign(request, qset_id): batch = QuestionSet.get(id=qset_id) if batch.interviews.count(): error_message = "Questions cannot be assigned \ interviews has already been conducted: %s." % \ batch.name.capitalize() messages.error(request, error_message) return HttpResponseRedirect( reverse( 'qset_questions_page', args=( batch.pk, ))) if request.method == 'POST': data = dict(request.POST) last_question = batch.last_question_inline() lib_questions = QuestionTemplate.objects.filter( identifier__in=data.get('identifier', '')) if lib_questions: for lib_question in lib_questions: question = Question.objects.create( identifier=lib_question.identifier, text=lib_question.text, answer_type=lib_question.answer_type, qset=batch, ) # assign the options for option in lib_question.options.all(): QuestionOption.objects.create( question=question, text=option.text, order=option.order) if last_question: QuestionFlow.objects.create( question=last_question, next_question=question) else: batch.start_question = question batch.save() last_question = question #batch_questions_form = BatchQuestionsForm(batch=batch,\ #\data=request.POST, instance=batch) success_message = "Questions successfully assigned to %s: %s." % ( batch.verbose_name(), batch.name.capitalize()) messages.success(request, success_message) return HttpResponseRedirect( reverse( 'qset_questions_page', args=( batch.pk, ))) used_identifiers = [ question.identifier for question in batch.questions.all()] library_questions = QuestionTemplate.objects.exclude( identifier__in=used_identifiers).order_by('identifier') question_filter_form = QuestionFilterForm() # library_questions = question_filter_form.filter(library_questions) breadcrumbs = Question.edit_breadcrumbs(qset=batch) page_name = '' if breadcrumbs: if breadcrumbs[0][0] == 'Listing Form': page_name = 'Listing' else: page_name = 'Batch' request.breadcrumbs(breadcrumbs) context = { 'batch_questions_form': unicode( BatchQuestionsForm()), 'batch': batch, 'button_label': 'Save', 'id': 'assign-question-to-batch-form', 'library_questions': library_questions, 'question_filter_form': question_filter_form, 'page_name': page_name, 'redirect_url': '/qsets/%s/questions/' % qset_id} return render(request, 'set_questions/assign.html', context)