You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BinaryBrains/survey/views.py

69 lines
2.7 KiB

6 months ago
from django.shortcuts import render, redirect
from django.views import View
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Survey
from django.contrib import messages
from .tips import TIPS_MAPPING # Assuming this is where you store your tips
class SurveyView(View):
template_name = 'survey/survey_form.html'
success_template = 'survey/survey_tips.html'
def get(self, request):
"""
Render the survey form. No login required for viewing the form.
"""
return render(request, self.template_name)
def post(self, request):
"""
Process the survey form and generate tips. Login is required for submitting the form.
"""
if not request.user.is_authenticated:
messages.error(request, "You must be logged in to submit the survey.")
return render(request, self.template_name)
# Extract data from the form
data = {
'user': request.user,
'water_usage': request.POST.get('dailyWaterUsage'),
'daily_consumption_awareness': request.POST.get('householdWater'),
'dripping_tap_wastage': request.POST.get('drippingTap'),
'brushing_habits': request.POST.get('tapWhileBrushing'),
'fix_leaks': request.POST.get('fixLeaks'),
'reuse_water': request.POST.get('reuseWater'),
'water_saving_appliances': request.POST.get('waterAppliances'),
'biggest_cause_of_wastage': request.POST.get('waterWastageCause'),
'resources_needed': request.POST.get('conservationResources'),
'additional_suggestions': request.POST.get('conservationSuggestions'),
}
try:
# Generate tips
tips = [
TIPS_MAPPING['water_usage'].get(data['water_usage'], ""),
TIPS_MAPPING['dripping_tap_wastage'].get(data['dripping_tap_wastage'], ""),
TIPS_MAPPING['reuse_water'].get(data['reuse_water'], ""),
TIPS_MAPPING['water_saving_appliances'].get(data['water_saving_appliances'], ""),
]
# Remove empty tips
tips = [tip for tip in tips if tip]
# Save survey
survey = Survey.objects.create(**data)
# Render success template with tips
context = {'survey': survey, 'tips': tips}
return render(request, self.success_template, context)
except Exception as e:
messages.error(request, f"Error: {str(e)}")
return render(request, self.template_name, {'data': data})
def index(request):
context = {
}
return render(request, 'survey/index.html', context)