Initial commit
This commit is contained in:
69
Enquete/enquete/apps/vragenlijst/views.py
Normal file
69
Enquete/enquete/apps/vragenlijst/views.py
Normal file
@@ -0,0 +1,69 @@
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render
|
||||
from .models import Questionnaire, QuestionnaireResponse, QuestionnaireStorage
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
|
||||
import csv
|
||||
from uuid import uuid4
|
||||
from pathlib import Path
|
||||
|
||||
from storage.storage import Storage
|
||||
# Create your views here.
|
||||
|
||||
|
||||
def index(request):
|
||||
# latest_question_list = Question.objects.order_by('-pub_date')[:5]
|
||||
questionnaires = Questionnaire.objects.order_by('name')
|
||||
context = {'questionnaires': questionnaires}
|
||||
return render(request, 'vragenlijst/index.html', context)
|
||||
|
||||
|
||||
def questionnaire(request, questionnaire_id):
|
||||
if request.method == 'POST':
|
||||
|
||||
# As we should have a Django form, we could use te form validator. For now, everyhing is valid ;)
|
||||
questionnaire = Questionnaire.objects.get(pk=questionnaire_id)
|
||||
|
||||
# Get all the questions in one list with a single query
|
||||
allQuestions = {}
|
||||
for question in list(questionnaire.allQuestions.order_by('order').values('id','name')):
|
||||
allQuestions[str(question['id'])] = question['name']
|
||||
|
||||
# Store the response as a ';' seperated CSV file in order of the questionaire questions order
|
||||
try:
|
||||
csv_file = Path(f'{settings.HANZE_TEMP_CSV_STORAGE}/{questionnaire.name}-{uuid4()}.csv')
|
||||
with open(csv_file, 'w') as csvfile:
|
||||
filewriter = csv.writer(csvfile, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
|
||||
# Add headers
|
||||
filewriter.writerow(['vraag', 'antwoord'])
|
||||
|
||||
for question in allQuestions:
|
||||
if request.POST.get(question):
|
||||
filewriter.writerow([allQuestions[question], request.POST[question]])
|
||||
|
||||
# Store the data also in a database
|
||||
QuestionnaireResponse(questionnaire=questionnaire, response=csv_file.read_text()).save()
|
||||
storageSettings = QuestionnaireStorage.objects.first()
|
||||
# Move data to external storage
|
||||
webdav = Storage(
|
||||
storage_type=storageSettings.type,
|
||||
url=storageSettings.server,
|
||||
username=storageSettings.username,
|
||||
password=storageSettings.password
|
||||
)
|
||||
|
||||
webdav.upload_file(source=csv_file, destination=f'{storageSettings.path}/{csv_file.name}')
|
||||
|
||||
messages.success(request, 'Questionaire is saved to disk.')
|
||||
|
||||
except Exception as ex:
|
||||
messages.error(request, f'Could not save the questionaire. Error: {ex}')
|
||||
|
||||
|
||||
# Redirect to starting point
|
||||
return HttpResponseRedirect('/vragenlijst/')
|
||||
|
||||
questionnaire = Questionnaire.objects.get(pk=questionnaire_id)
|
||||
context = {'questionnaire': questionnaire, 'menu_width': 100 / questionnaire.topics.count()}
|
||||
return render(request, 'vragenlijst/form.html', context)
|
||||
Reference in New Issue
Block a user