mirror of
https://github.com/Rushilwiz/drive-pipeline.git
synced 2025-04-09 15:00:20 -04:00
106 lines
4.5 KiB
Python
106 lines
4.5 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.http import HttpResponse
|
|
from django.utils.html import strip_tags
|
|
from django.template import loader
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.core import serializers
|
|
from django.core.mail import EmailMultiAlternatives, send_mail
|
|
from django.conf import settings
|
|
from email.mime.image import MIMEImage
|
|
|
|
import csv
|
|
|
|
from .forms import PollForm
|
|
from .models import Response
|
|
from .choices import *
|
|
|
|
# Create your views here.
|
|
def results(request):
|
|
responseID = request.session.get('_response')
|
|
if not responseID:
|
|
return redirect('/')
|
|
|
|
response = get_object_or_404(Response, id=responseID)
|
|
scores = dict(zip([field.verbose_name for field in Response._meta.get_fields()][4:-2], list(serializers.serialize("python", [response])[0]['fields'].values())[3:-2]))
|
|
|
|
context = {
|
|
'response': response,
|
|
'scores': scores
|
|
}
|
|
|
|
html_message = loader.render_to_string('drive/email_template.html', context=context)
|
|
plain_message = strip_tags(html_message)
|
|
email = EmailMultiAlternatives(
|
|
'DRIVE Pipeline Poll Results',
|
|
plain_message,
|
|
settings.EMAIL_HOST_USER,
|
|
[response.email]
|
|
)
|
|
email.attach_alternative(html_message, "text/html")
|
|
|
|
with open(f'{settings.BASE_DIR}{response.results.url}', 'rb') as f:
|
|
image_data = f.read()
|
|
image = MIMEImage(image_data)
|
|
image.add_header('Content-ID', '<image>')
|
|
email.attach(image)
|
|
|
|
email.send(fail_silently=False)
|
|
|
|
return render(request, 'drive/results.html', context=context)
|
|
|
|
def index(request):
|
|
form = PollForm()
|
|
if request.method=='POST':
|
|
form = PollForm(request.POST)
|
|
if form.is_valid():
|
|
data = form.cleaned_data
|
|
|
|
decision_score = round(sum([DECISION_WEIGHT[i] for i in range(len(DECISION_QUESTIONS)) if data[f'd{i}'] == 'n/a' or data[f'd{i}'] == 'complete'])/sum(DECISION_WEIGHT)*100)
|
|
it_score = round(sum([DECISION_IT_WEIGHT[i] for i in range(len(DECISION_IT_QUESTIONS)) if data[f'dit{i}'] == 'n/a' or data[f'dit{i}'] == 'complete'])/sum(DECISION_IT_WEIGHT)*100)
|
|
legal_score = round(sum([DECISION_LEGAL_WEIGHT[i] for i in range(len(DECISION_LEGAL_QUESTIONS)) if data[f'dl{i}'] == 'n/a' or data[f'dl{i}'] == 'complete'])/sum(DECISION_LEGAL_WEIGHT)*100)
|
|
resources_score = round(sum([RESOURCES_WEIGHT[i] for i in range(len(RESOURCES_QUESTIONS)) if data[f'r{i}'] == 'n/a' or data[f'r{i}'] == 'complete'])/sum(RESOURCES_WEIGHT)*100)
|
|
impact_score = round(sum([IMPACT_WEIGHT[i] for i in range(len(IMPACT_QUESTIONS)) if data[f'i{i}'] == 'n/a' or data[f'i{i}'] == 'complete'])/sum(IMPACT_WEIGHT)*100)
|
|
velocity_score = round(sum([VELOCITY_WEIGHT[i] for i in range(len(VELOCITY_QUESTIONS)) if data[f'v{i}'] == 'n/a' or data[f'v{i}'] == 'complete'])/sum(VELOCITY_WEIGHT)*100)
|
|
expectations_score = round(sum([EXPECTATIONS_WEIGHT[i] for i in range(len(EXPECTATIONS_QUESTIONS)) if data[f'e{i}'] == 'n/a' or data[f'e{i}'] == 'complete'])/sum(EXPECTATIONS_WEIGHT)*100)
|
|
scores = [decision_score, it_score, legal_score, resources_score, impact_score, velocity_score, expectations_score]
|
|
overall = round(sum(scores)/len(scores))
|
|
|
|
response = Response(
|
|
first_name=data['first_name'],
|
|
last_name=data['last_name'],
|
|
email=data['email'],
|
|
expectations=expectations_score,
|
|
velocity=velocity_score,
|
|
impact=impact_score,
|
|
resources=resources_score,
|
|
decision=decision_score,
|
|
decision_it=it_score,
|
|
decision_legal=legal_score,
|
|
overall=overall,
|
|
)
|
|
|
|
response.save()
|
|
response.save()
|
|
|
|
request.session['_response'] = response.id
|
|
return redirect('results')
|
|
|
|
context = {
|
|
'form': form
|
|
}
|
|
|
|
return render(request, 'drive/index.html', context=context)
|
|
|
|
@login_required
|
|
def export (request):
|
|
# Create the HttpResponse object with the appropriate CSV header.
|
|
response = HttpResponse(content_type='text/csv')
|
|
response['Content-Disposition'] = 'attachment; filename="response_data.csv"'
|
|
|
|
writer = csv.writer(response)
|
|
data = serializers.serialize("python", Response.objects.all())
|
|
writer.writerow([field.verbose_name for field in Response._meta.get_fields()][1:-2])
|
|
for i in data:
|
|
writer.writerow(list(i['fields'].values()))
|
|
|
|
return response |