Ejemplo n.º 1
0
def fill_survey_v2(request, survey_uuid):
    try:
        promoter = request.user.promoterprofile
    except ObjectDoesNotExist:
        error_meta = {
            "method": "promoter.views.fill_survey_v2",
        }
        ErrorLog.objects.create_log(4, "Promoter Object Error", error_meta,
                                    request)
        raise SuspiciousOperation('Error Code: 4')
    try:
        survey = Survey.objects.get_survey(survey_uuid)
    except (Survey.DoesNotExist, ValueError):
        error_meta = {
            "method": "promoter.views.fill_survey_v2",
            "survey_uuid": survey_uuid
        }
        ErrorLog.objects.create_log(request=request,
                                    error_code=7,
                                    error_type="Survey Object Error",
                                    error_meta=error_meta)
        raise SuspiciousOperation('Error Code: 7')

    if promoter.check_survey_filled(survey):
        activity_meta = {
            "method": "promoter.views.fill_survey_v2",
            "survey_id": str(survey.id)
        }
        ActivityLog.objects.create_log(request,
                                       "Promoter Survey Filling Again",
                                       activity_meta)
        return HttpResponse("already Filled")
    else:
        total_questionset = request.session.get('total_questionset', None)
        question_set_number = request.session.get('question_set_number', None)

        if request.session.get('survey_id', None):
            survey_id = int(request.session['survey_id'])
            if survey_id != survey.id:
                request.session['survey_id'] = survey.id
                total_questionset = None
                question_set_number = None
        else:
            request.session['survey_id'] = survey.id

        if request.POST:
            questionset = survey.questionset_set.all().order_by('sort_id')[
                question_set_number - 1]
            question_set_answer_form = QuestionSetAnswerForm(
                request.POST, questionset=questionset, promoter=promoter)
            if question_set_answer_form.is_valid():
                questions = questionset.question_set.all().order_by('sort_id')
                for question in questions:
                    answer_text = question_set_answer_form.cleaned_data.get(
                        'ques-' + str(question.id) + '-answer', None)
                    try:
                        answer_obj = Answer.objects.get(question_id=question,
                                                        promoter_id=promoter)
                    except Answer.DoesNotExist:
                        answer_obj = None

                    if answer_obj:
                        answer_obj_parsed = json.loads(answer_obj.answer_text)
                        if question.question_type == 'CH2' or question.question_type == 'CH6':
                            comment = question_set_answer_form.cleaned_data.get(
                                'ques-' + str(question.id) + '-comment', None)

                            if str(answer_obj_parsed['text']) != str(
                                    answer_text) or str(
                                        answer_obj_parsed['comment']) != str(
                                            comment):
                                answer_dict = {
                                    "text": answer_text,
                                    "comment": comment
                                }
                                answer_obj.answer_text = json.dumps(
                                    answer_dict)
                                answer_obj.save()
                        else:
                            if str(answer_obj_parsed['text']) != str(
                                    answer_text):
                                answer_dict = {"text": answer_text}
                                answer_obj.answer_text = json.dumps(
                                    answer_dict)
                                answer_obj.save()
                    else:

                        if question.question_type == 'CH2' or question.question_type == 'CH6':
                            comment = question_set_answer_form.cleaned_data.get(
                                'ques-' + str(question.id) + '-comment', None)
                            answer_dict = {
                                "text": answer_text,
                                "comment": comment
                            }
                        else:
                            answer_dict = {"text": answer_text}
                        answer_str = json.dumps(answer_dict)
                        answer_obj = Answer(question_id=question,
                                            promoter_id=promoter,
                                            answer_text=answer_str)
                        answer_obj.save()

                if question_set_number == total_questionset:
                    request.session.pop('total_questionset')
                    request.session.pop('question_set_number')
                    return survey_filled(request, survey, promoter)
                else:
                    request.session['question_set_number'] += 1
                    activity_meta = {
                        "method": "promoter.views.fill_survey_v2",
                        "survey_id": str(survey.id),
                        "total_questionset": str(total_questionset),
                        "question_set_number": str(question_set_number)
                    }
                    ActivityLog.objects.create_log(
                        request, "Promoter Survey Question Filled",
                        activity_meta)
                    return redirect('/pr/fill_survey/' + str(survey.uuid))
            else:
                context = {
                    "questionset": questionset,
                    "question_set_answer_form": question_set_answer_form
                }
                return render(request, 'promoter/fill_survey_v2.html', context)
        else:
            if not total_questionset or not question_set_number:
                questionset = survey.questionset_set.all().order_by(
                    'sort_id').first()
                total_questionset = survey.questionset_set.all().count()
                question_set_number = 1
                request.session['question_set_number'] = question_set_number
                request.session['total_questionset'] = total_questionset
            else:
                questionset = survey.questionset_set.all().order_by('sort_id')[
                    question_set_number - 1]

            question_set_answer_form = QuestionSetAnswerForm(
                questionset=questionset, promoter=promoter)
            context = {
                "questionset": questionset,
                "question_set_answer_form": question_set_answer_form
            }
            activity_meta = {
                "method": "promoter.views.fill_survey_v2",
                "survey_id": str(survey.id),
                "total_questionset": str(total_questionset),
                "question_set_number": str(question_set_number)
            }
            ActivityLog.objects.create_log(request,
                                           "Promoter Survey Display Question",
                                           activity_meta)
            return render(request, 'promoter/fill_survey_v2.html', context)
Ejemplo n.º 2
0
def save_survey(request):
    dto = Answer(survey_idx=request.POST["survey_idx"],
                 num=request.POST["num"])

    dto.save()
    return render_to_response("success.html")