Skip to content

Commit 2bbfe75

Browse files
committed
Merge branch 'master' of github.com:arkavidia-hmif/arkavidia-backend
2 parents c85db2e + c2d1913 commit 2bbfe75

4 files changed

Lines changed: 58 additions & 7 deletions

File tree

arkav/arkalogica/admin.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,20 @@
33
from arkav.arkalogica.models import Choice, ChoiceImage
44
from arkav.arkalogica.models import Answer, Submission
55
from arkav.arkalogica.models import QuestionImage
6+
from arkav.arkalogica.services import ArkalogicaService
67

78

89
@admin.register(Session)
910
class SessionAdmin(admin.ModelAdmin):
1011
list_display = ['title', 'description', 'start_time', 'end_time']
12+
actions = ['create_csv']
13+
14+
def create_csv(self, request, queryset):
15+
q = queryset[0]
16+
container = ArkalogicaService().get_submissions(q)
17+
return ArkalogicaService().create_csv(container, 'Submissions-%s' % q)
18+
19+
create_csv.short_description = 'Export Submissions to CSV'
1120

1221

1322
class ChoiceInline(admin.TabularInline):

arkav/arkalogica/migrations/0002_submission_session.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Generated by Django 2.2.13 on 2021-01-25 12:05
1+
# Generated by Django 2.2.13 on 2021-02-01 06:52
22

33
from django.db import migrations, models
44
import django.db.models.deletion
@@ -14,10 +14,10 @@ class Migration(migrations.Migration):
1414
migrations.AddField(
1515
model_name='submission',
1616
name='session',
17-
field=models.OneToOneField(
18-
default=1, on_delete=django.db.models.deletion.CASCADE,
19-
related_name='submission', to='arkalogica.Session'
20-
),
21-
preserve_default=False,
17+
field=models.ForeignKey(
18+
default=2,
19+
on_delete=django.db.models.deletion.CASCADE,
20+
related_name='submission',
21+
to='arkalogica.Session'),
2222
),
2323
]

arkav/arkalogica/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Submission(models.Model):
2828
start = models.DateTimeField(auto_now_add=True, editable=False)
2929
end = models.DateTimeField(auto_now=True)
3030
user = models.OneToOneField(to=User, related_name='submission', on_delete=models.CASCADE, unique=True)
31-
session = models.OneToOneField(to=Session, related_name='submission', on_delete=models.CASCADE, unique=True)
31+
session = models.ForeignKey(to=Session, related_name='submission', on_delete=models.CASCADE, default=2)
3232

3333
def __str__(self):
3434
return self.user.full_name + "'s Submission"

arkav/arkalogica/services.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from rest_framework import status
88
from django.db import transaction
99
from arkav.utils.exceptions import ArkavAPIException
10+
import csv
11+
from django.http import HttpResponse
1012

1113

1214
class ArkalogicaService:
@@ -34,6 +36,46 @@ def get_submission(self, requested_user):
3436
submission, state = Submission.objects.get_or_create(user=requested_user)
3537
return submission
3638

39+
@transaction.atomic
40+
def get_submissions(self, session):
41+
content = []
42+
43+
questions_id = []
44+
# Create header (line 1)
45+
header = []
46+
header.append("user")
47+
if session.questions.count() > 0:
48+
for q in session.questions.all():
49+
questions_id.append(q.id)
50+
header.append('%s' % q)
51+
52+
content.append(header)
53+
54+
# Create content (line 2-...)
55+
all_submissions = session.submission.all()
56+
for sub in all_submissions:
57+
user_submission = []
58+
user_submission.append(sub.user.full_name)
59+
for q in questions_id:
60+
ans = Answer.objects.filter(submission__user__id=sub.user.id, question=q).first()
61+
if ans:
62+
user_submission.append(ans.tag)
63+
else:
64+
user_submission.append('-')
65+
content.append(user_submission)
66+
67+
return content
68+
69+
def create_csv(self, content, fileName):
70+
response = HttpResponse(content_type='text/csv')
71+
response['Content-Disposition'] = 'attachment; filename="%s.csv"' % fileName
72+
73+
writer = csv.writer(response)
74+
for c in content:
75+
writer.writerow(c)
76+
77+
return response
78+
3779
@transaction.atomic
3880
def submit_answer(self, answer_data, requested_user):
3981
session = Session.objects.first()

0 commit comments

Comments
 (0)