Commit 61689fc2d836dc187ee1e3e779e99e31ac26293d

Authored by Jailson Dias
1 parent e2cc437c

criado o model de respostas do aluno e ajustes no template de visualizar enquete…

… pelo aluno #146, #174
courses/templates/subject/form_view_student.html
@@ -17,7 +17,8 @@ @@ -17,7 +17,8 @@
17 </div> 17 </div>
18 <div class="panel-body"> 18 <div class="panel-body">
19 <p>{{topic.description|linebreaks}}</p> 19 <p>{{topic.description|linebreaks}}</p>
20 - {% list_topic_foruns request topic %} 20 + {% list_topic_foruns request topic %}
  21 + {% list_topic_poll request topic %}
21 </div> 22 </div>
22 23
23 <div class="modal fade" id="forumModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 24 <div class="modal fade" id="forumModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
@@ -37,4 +38,4 @@ @@ -37,4 +38,4 @@
37 </div> 38 </div>
38 </div> 39 </div>
39 </div> 40 </div>
40 -</div>  
41 \ No newline at end of file 41 \ No newline at end of file
  42 +</div>
courses/templates/subject/poll_item_actions.html
1 -{% load static i18n %} 1 +{% load static i18n permission_tags%}
2 2
3 <script src="{% static 'js/modals_requisitions.js'%}"></script> 3 <script src="{% static 'js/modals_requisitions.js'%}"></script>
4 <script src="{% static 'js/modal_poll.js'%}"></script> 4 <script src="{% static 'js/modal_poll.js'%}"></script>
5 5
  6 +{% if request.user|has_role:'professor, system_admin'%}
6 {% for poll in polls %} 7 {% for poll in polls %}
7 <li id="poll_{{poll.slug}}"><i class="material-icons">poll</i> <a href="javascript:get('{% url 'course:poll:update_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a><a href="javascript:get('{% url 'course:poll:delete_poll' poll.slug %}','#poll','#modal_poll');"><span class="glyphicon glyphicon-remove"></span></a></li> 8 <li id="poll_{{poll.slug}}"><i class="material-icons">poll</i> <a href="javascript:get('{% url 'course:poll:update_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a><a href="javascript:get('{% url 'course:poll:delete_poll' poll.slug %}','#poll','#modal_poll');"><span class="glyphicon glyphicon-remove"></span></a></li>
8 {% endfor %} 9 {% endfor %}
9 <button class="btn btn-primary btn-raised" onclick="javascript:get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans '+ Create Poll' %}</button> 10 <button class="btn btn-primary btn-raised" onclick="javascript:get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans '+ Create Poll' %}</button>
  11 +{% else %}
  12 +{% for poll in polls %}
  13 + <li id="poll_{{poll.slug}}"><i class="material-icons">poll</i> <a href="javascript:get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a></li>
  14 +{% endfor %}
  15 +{% endif %}
10 <div class="row" id="modal_poll"> 16 <div class="row" id="modal_poll">
11 17
12 </div> 18 </div>
1 from django.contrib import admin 1 from django.contrib import admin
2 2
3 -from .models import Poll, Answer 3 +from .models import Poll, Answer, AnswersStudent
4 4
5 class PollAdmin(admin.ModelAdmin): 5 class PollAdmin(admin.ModelAdmin):
6 list_display = ['name', 'slug','limit_date'] 6 list_display = ['name', 'slug','limit_date']
@@ -10,5 +10,10 @@ class AnswerAdmin(admin.ModelAdmin): @@ -10,5 +10,10 @@ class AnswerAdmin(admin.ModelAdmin):
10 list_display = ['answer','order'] 10 list_display = ['answer','order']
11 search_fields = ['answer'] 11 search_fields = ['answer']
12 12
  13 +class AnswersStudentAdmin(admin.ModelAdmin):
  14 + list_display = ['student','poll','answered_in']
  15 + search_fields = ['student','poll']
  16 +
13 admin.site.register(Poll, PollAdmin) 17 admin.site.register(Poll, PollAdmin)
14 admin.site.register(Answer, AnswerAdmin) 18 admin.site.register(Answer, AnswerAdmin)
  19 +admin.site.register(AnswersStudent, AnswersStudentAdmin)
poll/migrations/0002_answersstudent.py 0 → 100644
@@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-10-12 18:26
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.conf import settings
  6 +from django.db import migrations, models
  7 +import django.db.models.deletion
  8 +
  9 +
  10 +class Migration(migrations.Migration):
  11 +
  12 + dependencies = [
  13 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  14 + ('poll', '0001_initial'),
  15 + ]
  16 +
  17 + operations = [
  18 + migrations.CreateModel(
  19 + name='AnswersStudent',
  20 + fields=[
  21 + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  22 + ('status', models.BooleanField(default=False, verbose_name='Answered')),
  23 + ('answered_in', models.DateTimeField(auto_now=True, verbose_name='Answered Date')),
  24 + ('answer', models.ManyToManyField(related_name='answers_stundet', to='poll.Answer', verbose_name='Answers Students')),
  25 + ('poll', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundet', to='poll.Poll', verbose_name='Answers')),
  26 + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundent', to=settings.AUTH_USER_MODEL, verbose_name='Student')),
  27 + ],
  28 + options={
  29 + 'verbose_name': 'Answer Stundent',
  30 + 'verbose_name_plural': 'Answers Student',
  31 + },
  32 + ),
  33 + ]
poll/migrations/0003_auto_20161012_1638.py 0 → 100644
@@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-10-12 19:38
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.db import migrations, models
  6 +import django.db.models.deletion
  7 +
  8 +
  9 +class Migration(migrations.Migration):
  10 +
  11 + dependencies = [
  12 + ('poll', '0002_answersstudent'),
  13 + ]
  14 +
  15 + operations = [
  16 + migrations.AlterField(
  17 + model_name='answersstudent',
  18 + name='poll',
  19 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundet', to='poll.Poll', verbose_name='Poll'),
  20 + ),
  21 + ]
poll/models.py
@@ -27,3 +27,17 @@ class Answer(models.Model): @@ -27,3 +27,17 @@ class Answer(models.Model):
27 27
28 def __str__(self): 28 def __str__(self):
29 return str(self.answer) + str("/") + str(self.poll) 29 return str(self.answer) + str("/") + str(self.poll)
  30 +
  31 +class AnswersStudent(models.Model):
  32 + status = models.BooleanField(_("Answered"), default=False)
  33 + poll = models.ForeignKey(Poll, verbose_name = _('Poll'), related_name='answers_stundet')
  34 + answer = models.ManyToManyField(Answer,verbose_name = _('Answers Students'), related_name='answers_stundet')
  35 + student = models.ForeignKey(User, verbose_name = _('Student'), related_name='answers_stundent')
  36 + answered_in = models.DateTimeField(_("Answered Date"),auto_now=True)
  37 +
  38 + class Meta:
  39 + verbose_name = _('Answer Stundent')
  40 + verbose_name_plural = _('Answers Student')
  41 +
  42 + def __str__(self):
  43 + return str(self.student) + str("/") + str(self.poll)
poll/templates/poll/view.html
@@ -7,19 +7,29 @@ @@ -7,19 +7,29 @@
7 7
8 {% block title_poll %} 8 {% block title_poll %}
9 <!-- Put your title here!!! --> 9 <!-- Put your title here!!! -->
10 -<h4 class="modal-title" id="myModalLabel">{{poll}}</h4> 10 +<h4 class="modal-title" id="myModalLabel">{{poll.name}}</h4>
11 {% endblock title_poll %} 11 {% endblock title_poll %}
12 12
13 {% block content_poll %} 13 {% block content_poll %}
14 <!-- Put ONLY your content here!!! --> 14 <!-- Put ONLY your content here!!! -->
15 <div class="row"> 15 <div class="row">
16 <div class="col-md-10 col-md-offset-1"> 16 <div class="col-md-10 col-md-offset-1">
17 - <h3>{% trans "Limit date:" %} {{poll.limit_date|date:'d/m/y'}}</h3> 17 + <p>{% trans "Limit date:" %} {{poll.limit_date|date:'d/m/y'}}</p>
  18 + </div>
  19 + <div class="col-md-10 col-md-offset-1">
  20 + <p>{% trans "Status:" %}
  21 + {% if status %}
  22 + {% trans "Poll answered" %}
  23 + {% else %}
  24 + {% trans "Poll don't yet answered" %}
  25 + {% endif %}
18 </div> 26 </div>
19 </div> 27 </div>
20 {% endblock content_poll %} 28 {% endblock content_poll %}
21 29
22 {% block button_save %} 30 {% block button_save %}
23 <!-- Put curtom buttons here!!! --> 31 <!-- Put curtom buttons here!!! -->
24 -<button type="submite" id="button" form="form" class="btn btn-primary btn-raised">{% trans "Answer" %}</button> 32 +{% if not status %}
  33 +<button type="button" class="btn btn-primary btn-raised">{% trans "Answer" %}</button>
  34 +{% endif %}
25 {% endblock button_save %} 35 {% endblock button_save %}
poll/tests/poll.py
@@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse @@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse
5 5
6 from rolepermissions.shortcuts import assign_role 6 from rolepermissions.shortcuts import assign_role
7 7
8 -from courses.models import Category, Course, Subject, Topic 8 +from courses.models import CourseCategory, Course, Subject, Topic
9 from poll.models import Poll 9 from poll.models import Poll
10 from users.models import User 10 from users.models import User
11 11
@@ -33,7 +33,7 @@ class PollTestCase(TestCase): @@ -33,7 +33,7 @@ class PollTestCase(TestCase):
33 ) 33 )
34 assign_role(self.user_student, 'student') 34 assign_role(self.user_student, 'student')
35 35
36 - self.category = Category( 36 + self.category = CourseCategory(
37 name = 'Categoria Teste', 37 name = 'Categoria Teste',
38 ) 38 )
39 self.category.save() 39 self.category.save()
@@ -12,7 +12,7 @@ from django.db.models import Q @@ -12,7 +12,7 @@ from django.db.models import Q
12 # from django.views.generic.edit import FormMixin 12 # from django.views.generic.edit import FormMixin
13 13
14 from .forms import PollForm 14 from .forms import PollForm
15 -from .models import Poll, Answer 15 +from .models import Poll, Answer, AnswersStudent
16 from core.mixins import NotificationMixin 16 from core.mixins import NotificationMixin
17 from users.models import User 17 from users.models import User
18 from courses.models import Course, Topic 18 from courses.models import Course, Topic
@@ -26,48 +26,14 @@ class ViewPoll(LoginRequiredMixin,generic.DetailView): @@ -26,48 +26,14 @@ class ViewPoll(LoginRequiredMixin,generic.DetailView):
26 def get_object(self, queryset=None): 26 def get_object(self, queryset=None):
27 return get_object_or_404(Poll, slug = self.kwargs.get('slug')) 27 return get_object_or_404(Poll, slug = self.kwargs.get('slug'))
28 28
29 - def form_invalid(self, form,**kwargs):  
30 - context = super(ViewPoll, self).form_invalid(form)  
31 - answers = {}  
32 - for key in self.request.POST:  
33 - if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date' and key != 'all_students' and key != 'students'):  
34 - answers[key] = self.request.POST[key]  
35 -  
36 - keys = sorted(answers)  
37 - context.context_data['answers'] = answers  
38 - context.context_data['keys'] = keys  
39 - return context  
40 -  
41 - def form_valid(self, form):  
42 - poll = self.object  
43 - poll = form.save(commit = False)  
44 - poll.answers.all().delete()  
45 - poll.save()  
46 -  
47 -  
48 - for key in self.request.POST:  
49 - if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date' and key != 'all_students' and key != 'students'):  
50 - answer = Answer(answer=self.request.POST[key],order=key,poll=poll)  
51 - answer.save()  
52 -  
53 - return super(ViewPoll, self).form_valid(form)  
54 -  
55 def get_context_data(self, **kwargs): 29 def get_context_data(self, **kwargs):
56 context = super(ViewPoll, self).get_context_data(**kwargs) 30 context = super(ViewPoll, self).get_context_data(**kwargs)
57 poll = self.object 31 poll = self.object
  32 + context["topic"] = poll.topic
58 context['course'] = poll.topic.subject.course 33 context['course'] = poll.topic.subject.course
59 context['subject'] = poll.topic.subject 34 context['subject'] = poll.topic.subject
60 context['subjects'] = poll.topic.subject.course.subjects.all() 35 context['subjects'] = poll.topic.subject.course.subjects.all()
61 -  
62 - answers = {}  
63 - for answer in poll.answers.all():  
64 - answers[answer.order] = answer.answer  
65 -  
66 - keys = sorted(answers)  
67 - context['answers'] = answers  
68 - context['keys'] = keys  
69 -  
70 - print (context) 36 + context['status'] = AnswersStudent.objects.get(poll=poll, student=self.request.user).status
71 return context 37 return context
72 38
73 39
@@ -93,7 +59,6 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin,generic.CreateView): @@ -93,7 +59,6 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
93 context.context_data['keys'] = keys 59 context.context_data['keys'] = keys
94 context.context_data['form'] = form 60 context.context_data['form'] = form
95 context.status_code = 400 61 context.status_code = 400
96 - print (context)  
97 # return self.render_to_response(context, status = 400) 62 # return self.render_to_response(context, status = 400)
98 return context 63 return context
99 64