from django.shortcuts import render, redirect from .models import Questions, CustomerFeedback, CustomerResponse, Options def surveys(request): feedback = CustomerFeedback.objects.all() return render(request, 'surveys.html', {'feedbacks': feedback}) def survey_view(request, id): try: feedback = CustomerFeedback.objects.get(id=id) questions = feedback.question.all() except CustomerFeedback.DoesNotExist: return render(request, '404.html') # Or a more specific error page if request.method == 'POST': for question in questions: response_text = request.POST.get(f"response_{question.id}") selected_option_ids = request.POST.getlist(f"options_{question.id}") response = CustomerResponse.objects.create( feedback=feedback, question=question, response_text=response_text if question.question_type in ["Text", "BigText"] else None ) if selected_option_ids: selected_options = Options.objects.filter(id__in=selected_option_ids) response.selected_option.set(selected_options) return redirect('thank_you', id=feedback.id) return render(request, 'survey.html', {'questions': questions, 'feedback': feedback}) def thank_you(request, id): return render(request, 'thank_you.html', {'id': id}) def survey_results(request, id): try: feedback = CustomerFeedback.objects.get(id=id) questions = feedback.question.all() except CustomerFeedback.DoesNotExist: return render(request, '404.html') # Or a more specific error page data = [] for question in questions: responses = CustomerResponse.objects.filter(question=question, feedback=feedback) if question.question_type in ['Radio', 'Checkbox']: options = question.option.all() option_counts = {option.option_name: responses.filter(selected_option=option).count() for option in options} data.append({ 'question': question.question, 'labels': list(option_counts.keys()), 'values': list(option_counts.values()), }) return render(request, 'results.html', {'data': data, 'feedback': feedback}) def all_results(request): feedbacks = CustomerFeedback.objects.all() return render(request, 'all_results.html', {'feedbacks': feedbacks})